繁体   English   中英

推荐的客户方式

[英]Recommended way to make a client

假设我想做一个客户端,例如 MySQL 客户端(但我的问题是通用的,不只是针对 MySQL 客户端,任何客户端),这是一个示例代码

func main() {
    db, err := sql.Open("mysql", "root:<yourMySQLdatabasepassword>@tcp(127.0.0.1:3306)/test")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()
}

我想将它移动到 function 所以我不必在整个地方初始化它,我的问题从这里开始我可以通过各种方式来做,我想知道哪一种是推荐的方式

这是功能方式

func client() (client *sql.DB, err error) {
    client, err = sql.Open("mysql", "root:<yourMySQLdatabasepassword>@tcp(127.0.0.1:3306)/test")

    if err != nil {
        panic(err.Error())
    }

    return
}

全局变量方式

var client, err = sql.Open("mysql", "root:<yourMySQLdatabasepassword>@tcp(127.0.0.1:3306)/test")

init函数方式

var Client *sql.DB

func init() {
    Client, err := sql.Open("mysql", "root:root@tcp(localhost:3306)/otp")

    if err != nil {
        panic(err.Error())
    }
}

最后是结构方式

type MSQL struct {
    // Fields...
}

func (m *MSQL) Client() *sql.DB {
    client, err := sql.Open("mysql", "root:<yourMySQLdatabasepassword>@tcp(127.0.0.1:3306)/test")

    if err != nil {
        panic(err.Error())
    }

    return client
}

// NewMysql().where(...)

我真的很困惑 select 哪一个

公开一个公共变量var Client *sql.DB很容易出错,因为我可以从任何地方执行<package>.Client = null

struct方式是 go 的方式,因为您可以随时使用多个连接到特定数据库。 您还可以使用New()传入config object 或其他道具来自定义其他db道具。 Max Connection

package database;

type Db struct{
 *db sql.DB
}

func New(driver, connection string) *Db {
 db, err := sql.Open(driver, connection)
 if err != nil {
   panic(err)
 }
 if err = db.Ping(); err != nil {
   panic(err)
 }
 /* configure details
 db.SetConnMaxLifetime(conLifeTime)
 db.SetMaxOpenConns(maxOpenConns)
 db.SetMaxIdleConns(maxIdleConns)
 */
 return &Db{db}
}

func (d *Db) Close() error {
 return d.db.Close();
}

它是通用的,您可以传递任何driverconnection string来创建与任何database的连接。

连接database.New("mysql", "root:<yourMySQLdatabasepassword>@tcp(127.0.0.1:3306)/test")

使用database.Db.Where(...)

关闭连接database.Db.Close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM