序文:
フレームワークにデータベースがないと操作できません。このフレームワークは一時的にgormsを導入します。gormsが正常に使用されない場合は、Golangデータベースドライバーに基づくホイールの作成を検討する必要があります
-
gormの紹介
// 在 go.mod 中加入 require github.com/jinzhu/gorm v1.9.12
gormを導入すると、暗号リソースが壁にブロックされてプルできない場合がありますが、現時点ではgormインストールを手動でダウンロードする必要があります。
cd $PATH/pkg/mod/cache/download/golang.org/x/ git clone https://github.com/golang/crypto.git go mod download // 重新安装
-
MySQL構成を取得する
MySQLの構成については、構成ファイルがconfディレクトリに定義されています:mysql.go
package conf var mysqlConf = map[string]map[string]string{ "default": { "host": "", "password": "", "port": "", "user": "", "dbname": "", }, } func GetAllMysqlConf() map[string]map[string]string { return mysqlConf } func GetMysqlConf(key string) map[string]string { if key == "" { key = "default" } return mysqlConf[key] }
このファイルには、データベースの関連する構成を格納する変数が定義されており、すべてのデータベース構成と単一の構成を取得するための次の方法
-
モデルを定義
-
BaseModelオブジェクトはモデル/ baseModelで定義され、データベース接続を取得およびデータベース接続を解放するためのメソッドがこのオブジェクトで定義されています
type BaseModel struct { dbConnect *gorm.DB } func (baseModel BaseModel) getDbConnect() *gorm.DB { var err error mysqlConfig := conf.GetMysqlConf("default") fmt.Println(mysqlConfig["user"] + ":" + mysqlConfig["password"] + "@(" + mysqlConfig["host"] + ":" + mysqlConfig["port"] + ")/" + mysqlConfig["dbname"] + "?charset=utf8&parseTime=True&loc=Local") baseModel.dbConnect, err = gorm.Open("mysql", mysqlConfig["user"]+":"+mysqlConfig["password"]+"@("+mysqlConfig["host"]+":"+mysqlConfig["port"]+")/"+mysqlConfig["dbname"]+"?charset=utf8&parseTime=True&loc=Local") //defer baseModel.dbConnect.Close() if err != nil { // 打日志 log.Println("数据库连接错误----", err) return nil } return baseModel.dbConnect } func (baseModel BaseModel) close() { if baseModel.dbConnect != nil { baseModel.dbConnect.Close() } }
データベース接続を取得する方法で、データベース接続を解放する操作を書き込むのに遅延を使用しない理由は、遅延操作の実行時間が、関数が終了してから終了するまでの時間であるためです。データベース接続を解放する操作がデータベース接続を取得するメソッドに記述されている場合、この接続は役に立たなくなる前に解放されます。
-
models / testModel.goでテストモデルを定義し、以下の4のテストコントローラーで使用します
type TestModel struct { BaseModel } func (test TestModel) Test() { db := test.getDbConnect() // 获取连接 if db == nil { fmt.Println("db 连接失败") } // 查询语句 rows, err := db.Raw("sql", ...args).Rows() if err != nil { fmt.Println(err) return } // 这个变量对应数据库中表的字段 var a, b, c, d, e, f string for rows.Next() { rows.Scan(&a, &b, &c, &d, &e, &f) fmt.Println(a, b, c, d, e, f) } defer rows.Close() // 更新语句 db.Exec("sql", ...args) // 根据 db.Error 和 db.RowsAffected 来判断 释放执行成功 defer test.close() }
-
-
コントローラーで使用
コントローラ/ testController.goで直接呼び出すだけです
type TestController struct { } func (t *TestController) Test(w http.ResponseWriter, r *http.Request) { testModel := models.TestModel{} testModel.Test() fmt.Fprint(w, "this is test.test") }
注:
1.テスト中にテストコントローラーのルーティングを登録する必要があり、データベースのリンク構成が正確である必要があります
2.このブログのサンプルコードアドレス:https : //github.com/zhuchenglin/goweb
3.作成は簡単ではありません、転載する必要がある場合は、出典を明記してください。https://www.cnblogs.com/zhuchenglin/p/12731078.html