Golang:使用 Iris 打造一款個(gè)人博客(一)
Iris 號(hào)稱世界第一快的框架
實(shí)際上測試對(duì)比幾款高性能的 go web 框架杀赢,Iris 框架的響應(yīng)速度確實(shí)優(yōu)于其他框架(當(dāng)然 gin 和其他框架也不賴)
在知乎和一些技術(shù)論壇里也有主張不使用 Iris 框架的文章辩恼,大概的內(nèi)容是 Iris 存在不可預(yù)測的安全性問題
今天不討論這些玩意,反正我個(gè)人使用過程中并沒有碰到什么安全隱患赌蔑,反而中意 Iris 的高性能和并發(fā)量
官方源碼文檔 GitHub:https://github.com/kataras/iris
具體的實(shí)例 demo 可以自行參考官方文檔耍目,遵循 MVC 架構(gòu)
這就不廢話了房交,下面開始 Iris 編寫個(gè)人博客第一彈,配置篇
項(xiàng)目結(jié)構(gòu)
開始編碼之前總是需要定義一下總體的項(xiàng)目結(jié)構(gòu)
可以看到除了 配置文件糙捺,數(shù)據(jù)庫連接 和 主執(zhí)行文件 之外
剩下的就是 控制器(controller)诫咱,視圖(server) 和 模型(models)
這就是所謂的 MVC 模型了
今天就先來看看配置文件如何去寫(個(gè)人習(xí)慣) 以及 配置數(shù)據(jù)庫連接
其實(shí)這也是大多數(shù) web 開發(fā)者一開始做的事情
配置文件
Iris 提供幾種配置文件的格式,我個(gè)人使用 .json 或 .yaml
在根目錄下新建 config.json 文件
簡單配置一下端口 和 靜態(tài)目錄
# config.json
{
"app_name": "Blog",
"port": "5000",
"static_path": "/static",
"mode": "dev"
}
config
加載到 config.go 文件
在 config 目錄下新建 config.go 文件
package config
import (
"encoding/json"
"os"
)
//服務(wù)端配置
type AppConfig struct {
AppName string `json:"app_name"`
Port string `json:"port"`
StaticPath string `json:"static_path"`
Mode string `json:"mode"`
}
//初始化服務(wù)器配置
func InitConfig() *AppConfig {
file, err := os.Open("F:/Go_work/src/Iris框架/config.json")
if err != nil {
panic(err.Error())
}
decoder := json.NewDecoder(file)
conf := AppConfig{}
err = decoder.Decode(&conf)
if err != nil {
panic(err.Error())
}
return &conf
}
連接 Mysql 數(shù)據(jù)庫
在 datasource 目錄下新建 db.go 編寫數(shù)據(jù)庫連接
package datasource
import (
"Iris_web/models"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
_ "github.com/lib/pq"
)
var Db *gorm.DB
func init(){
var err error
mysql_conn := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "root","wocao", "127.0.0.1", 3306, "iris_blog")
//賦值給全局變量 Db 沒有 := 就是賦值
Db, err = gorm.Open("mysql", mysql_conn)
if err != nil{
panic(err)
}
fmt.Println("初始化數(shù)據(jù)庫成功......")
Db.LogMode(false) //是否開啟log
Db.AutoMigrate( &models.Article{},&models.G_count{}) //自動(dòng)遷移 跟py一樣
}
配置部分結(jié)束洪灯,是不是很簡單
歡迎轉(zhuǎn)載坎缭,但要聲明出處,不然我順著網(wǎng)線過去就是一拳签钩。
個(gè)人技術(shù)博客:http://www.gzky.live