如何在Go中将初始化数据库连接初始化为一个包?

时间:2018-08-18 16:12:40

标签: go package

我有两个软件包,<table> <thead> <tr> {% for key in array|keys %} <th>{{ key }}</th> {% endfor %} </tr> </thead> <tbody> {% for sub_array in array %} <tr> {% for value in sub_array %} <td>{{ value }}</th> {% endfor %} </tr> {% endfor %} </tbody> </table> main。 但是,我收到db错误。

db.go

"DB declared and not used"

main.go

package db

import (
  "database/sql"
)

var DB *sql.DB

func Connect() {
  DB, err := sql.Open("mysql", "root:Berlin2018@/jplatform")
  if err != nil {
    panic(err.Error())
  }
}

func Close() {
  DB.Close()
}

2 个答案:

答案 0 :(得分:1)

Golang对于变量声明非常严格,在Golang FAQs中也提到了它:

  

存在未使用的变量可能表明存在错误,而未使用   导入只会减慢编译速度,这种影响可能会变成   随着程序的积累,代码和程序员随着时间的流逝而变得越来越重要。   由于这些原因,Go拒绝编译未使用的程序   变量或进口,短期交易有利于长期   建立速度和程序清晰度。

不过,解决这种情况很容易。使用空白标识符可以在开发过程中让未使用的东西继续存在。

_, err := sql.Open("mysql", "root:Berlin2018@/jplatform")

但是由于您想要通过创建连接来获得数据库实例。我建议通过从函数返回使用它,也可以通过以下方式将ping发送到数据库服务器来检查连接是否正常工作:

var DB *sql.DB

func Connect() {
    DB, err := sql.Open("mysql", "root:Berlin2018@/jplatform")
    if err = DB.Ping(); err != nil {
        log.Panic(err)
    }
}

或者您可以创建一个可在任何位置使用的结构,包括对每个需要数据库连接以查询数据库的函数使用方法接收器

type Env struct {
    db *sql.DB
}

func Connect() {
    db, err := sql.Open("mysql", "root:Berlin2018@/jplatform")
    _ = &Env{db: db}
}

func(env *Env) getDataFromDatabase(){}

答案 1 :(得分:1)

您没有在DB上使用db.go变量:

package db

import (
  "database/sql"
)

var DB *sql.DB

func Connect() {
  con, err := sql.Open("mysql", "root:Berlin2018@/jplatform")
  if err != nil {
    panic(err.Error())
  }
  DB = con
}

func Close() {
  DB.Close()
}