Go

去全局变量和短变量定义

发布于 2021-02-01 11:09:48

在以下片段中

package ...

var Conn *sql.DB // outer Conn

func Init(user, pwd, dbname string, port int) {
    Conn, err := sql.Open("postgres", "... args") // inner Conn
    // ..
}

内部Conn是一个新变量, 外部 Conn将保持为空。

通过显式定义err短变量定义并将其替换为赋值,似乎可以正确地初始化外部Conn变量

    var err error
    Conn, err = sql.Open("postgres", "... args") // inner Conn

有没有一种更简单的方法来指定内部Conn变量,而不是实际上是作用域变量,而是全局Conn变量?我在想类似的东西package.Conn,但这在包本身内部无效。

关注者
0
被浏览
96
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    不,就是这样。:=只是 New()(
    https://golang.org/doc/effective_go.html#allocation_new
    变量声明(var
    foo int)的快捷方式。一种更惯用的方法(通常是更好的设计)是返回连接而不使用全局变量。

    func Init(user string, pwd string, dbname string, port int) (*sql.DB, error) {
        // ...
    }
    

    依赖注入是您的朋友,请尽量不要超出范围。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看