我有两个软件包,<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()
}
答案 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()
}