Gin+GORM+Zap+PostgreSQL的Web后端-Gin進(jìn)階

上一篇文章介紹了Gin和Gin的簡單使用,本次介紹Gin進(jìn)階使用,并和一些常用的庫組合使用,最后測試運(yùn)行并寫入數(shù)據(jù)到PostgreSQL數(shù)據(jù)庫。

可配置

在configs目錄下,新增了config.yml作為配置文件,使用viper庫讀取配置文件參數(shù),來設(shè)置Gin框架和一些其他參數(shù)。

func InitConfig() {
    viper.AddConfigPath("./configs")
    viper.SetConfigType("yaml")
    viper.SetConfigName("config")

    if err := viper.ReadInConfig(); err != nil {
        log.Fatalf("fatal error: read config file: %v", err)
    }
    if err := viper.Unmarshal(&AppConfig); err != nil {
        log.Fatalf("set config file error: %v", err)
    }
}

路由分組

新建router目錄存放所有路由相關(guān)代碼,router.go為主路由文件,example.go為分路由文件,使用Gin的路由Group設(shè)置路由組。

func InitRouter() *gin.Engine {
    router := gin.New()
    router.Use(gin.Recovery())
    if gin.Mode() == gin.DebugMode {
        router.Use(gin.Logger())
    }
    miniRLoad(router)
    adminRLoad(router)
    return router
}

GORM

全功能ORM,特性:支持事務(wù),批量插入,SQL構(gòu)建器,自動遷移,靈活的可擴(kuò)展API,開發(fā)者友好。

在configs目錄下,新增db.go,作為數(shù)據(jù)庫配置部分,InitDB初始化數(shù)據(jù)庫連接,MigrateDB來遷移模型變更到數(shù)據(jù)庫中,會在啟動時自動創(chuàng)建對應(yīng)的表結(jié)構(gòu),無需手動在數(shù)據(jù)庫中操作。

func InitDB() *gorm.DB {
    dsn := "host=" + AppConfig.DB.Host + " user=" + AppConfig.DB.User + " password=" + AppConfig.DB.Password + " dbname=" + AppConfig.DB.Name + " port=" + AppConfig.DB.Port + " sslmode=disable TimeZone=Asia/Shanghai"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
        DisableForeignKeyConstraintWhenMigrating: true,
    })
    if err != nil {
        global.Logger.Errorf("Failed to init db connection,error: %v", err)
    }
    return db
}

func MigrateDB() {
    err := global.DB.AutoMigrate(
        &model.Users{},
    )
    if err != nil {
        global.Logger.Errorf("Failed to migrate db,error: %v", err)
        os.Exit(0)
    }
}

Zap日志

在 Go 中實(shí)現(xiàn)極快、結(jié)構(gòu)化、分級的日志記錄,在官網(wǎng)測試記錄中,普遍比其他日志庫要快。

在pkg目錄下,新建log包,新建logs.go,可以通過zap.NewProduction()來快速初始化Zap日志,但

缺少自定義,像日志格式、日志文件位置和日志切割,這部分代碼較長,暫不在這里貼了,后面會提供整個項(xiàng)目代碼庫地址。

運(yùn)行測試

上面組件都會在main.go中進(jìn)行初始化,最后啟動Gin框架提供http服務(wù)。

使用docker啟動PostgreSQL數(shù)據(jù)庫

docker run -d --name example -e POSTGRES_PASSWORD=example -p 5432:5432 postgres

進(jìn)入項(xiàng)目的server目錄下,運(yùn)行下面命令啟動Gin服務(wù)

go run main.go

發(fā)送一個POST請求到http://127.0.0.1:8080/api/user/add,Body內(nèi)容如下,正常可在數(shù)據(jù)庫中插入一條數(shù)據(jù)了。

{
    "userName" : "test",
    "pw":"aa1234"
}

介紹了Gin進(jìn)階使用,結(jié)合一些流行庫,作為一個示例,完整代碼請在GitHub上下載,具體鏈接為https://github.com/robin-2016/gin_example。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容