登录
首页 >  Golang >  Go问答

推荐的建立客户的方式

来源:stackoverflow

时间:2024-04-18 17:03:35 100浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《推荐的建立客户的方式》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

假设我想制作一个客户端,例如mysql客户端(但我的问题是通用的,不仅仅是mysql客户端,任何客户端),这是一个示例代码

func main() {
    db, err := sql.open("mysql", "root:@tcp(127.0.0.1:3306)/test")
    if err != nil {
        panic(err.error())
    }
    defer db.close()
}

我想将它移到一个函数中,这样我就不必到处初始化它,我的问题从这里开始,我可以通过多种方式做到这一点,我想知道哪一种是推荐的方式

这是功能方式

func client() (client *sql.db, err error) {
    client, err = sql.open("mysql", "root:@tcp(127.0.0.1:3306)/test")

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

    return
}

全局变量方式

var client, err = sql.open("mysql", "root:@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:@tcp(127.0.0.1:3306)/test")

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

    return client
}

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

我真的很困惑要选择关注哪个


正确答案


暴露公共变量 var client *sql.db 很容易出错,因为我可以从任何地方执行 .client = null

struct 方式是可行的方式,因为您可以随时使用每个到特定数据库的多个连接。 您还可以使用 new() 传入 config 对象或其他 props 来自定义其他 db props。像 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:@tcp(127.0.0.1:3306)/test")

用法 database.db.where(...)

关闭连接database.db.close()

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>