[英]Is there a way to make Google Cloud Pub/Sub Schema fields optional?
[英]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();
}
它是通用的,您可以传递任何driver
和connection 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.