第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中創(chuàng)建 MySql 接口的正確方法

在 Go 中創(chuàng)建 MySql 接口的正確方法

Go
回首憶惘然 2022-06-01 11:21:15
我正在將我的應用程序連接到 MySql。代碼的結構如下,雖然可行,但對我來說有點奇怪。這是正確的模式嗎?我已將與 Db 相關的內容保存在一個單獨的文件中,如下所示:var DatabaseObject MySqlDatabasetype IMySqlDatabase interface {    ConnectToDb() MySqlDatabase    GetDb() MySqlDatabase}type MySqlDatabase struct{    Db *sql.DB}func (MySqlDatabase) ConnectToDb(connectionString string){    db, _ := sql.Open("mysql", connectionString)    _ = db.Ping()    DatabaseObject = MySqlDatabase{Db: db}}    func (MySqlDatabase) GetDb() *sql.DB{    return DatabaseObject.Db}因此,我可以通過以下方式連接到數(shù)據(jù)庫:infrastructureMySql.DatabaseObject.ConnectToDb(connectionString)我覺得很奇怪。首先有沒有界面的感覺?如果我沒有它,我可以簡單地使用*sql.DB作為全局變量。感謝您的反饋意見。
查看完整描述

2 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

在創(chuàng)建 db 時,我通常喜歡遵循 Ben Johnson 的本指南: 請參閱 3. Wrap types for application-specific context


這篇文章提到我們可以通過與接口交互在這里提供一個抽象層,所以你不需要在應用層泄露這些細節(jié)。您提到您想要執(zhí)行查詢和其他命令,以便您可以針對這些命令繪制一個界面,如下所示:


type Mysql struct {

    db *sql.DB

}


// Wrap a new connection into the MySql struct

func NewMysql() (*Mysql, error) {

    db, err := sql.Open(...)

    return &Mysql{ db }, err

}


func (m *Mysql) GetUsers(...) ([]User, error) {}

func (m *Mysql) CreateUsers(...) (User, error) {}


type UserStore interface {

   GetUsers func(...) []User, error)

   CreateUsers func(...) (User, error)

}


查看完整回答
反對 回復 2022-06-01
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

這絕對是不正確的:

  • MySqlDatabase沒有實現(xiàn)IMySqlDatabase,所以如果你真的嘗試使用該接口,它將無法工作

  • 你實際上并沒有使用界面

并且有風格問題:

  • 接口返回具體類型,這違背了目的

  • 界面似乎是自己的工廠?或者其他的東西?目前還不清楚接口或具體類型應該是/做什么

  • Go 中的接口不應該被命名IThing,那是 C#

  • 您似乎有修改全局變量的類型方法,這對于任何使用它們的人來說都是非常出乎意料的


查看完整回答
反對 回復 2022-06-01
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號