gpt4 book ai didi

pointers - Golang、指针、函数

转载 作者:IT王子 更新时间:2023-10-29 01:26:37 26 4
gpt4 key购买 nike

我是刚接触 Golang 和一般的编译型静态类型编程。我之前的所有经验都是使用 Python 的。

这种范式转变既令人沮丧(程序很少编译)又让我受益匪浅,因为我终于开始思考许多以前对我来说很陌生的概念(垃圾收集、指针、作用域)。

有人可以在概念层面上向我解释为什么这个程序无法编译以及修复它的语法吗?我只是想查询数据库并打印结果:

package main

import (
"database/sql"
"log"

_ "github.com/denisenkom/go-mssqldb"
)

func main() {

db, err := sql.Open("sqlserver", "odbc:server=myServer;user id=myName;password=myPassword;")
if err != nil {
log.Fatal(err)
}
defer db.Close()

q()
}

func q() {

var (
id int
name string
)

rows, err := db.Query("SELECT id, name FROM myTable")
if err != nil {
log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
err := rows.Scan(&id, &name)

if err != nil {
log.Fatal(err)
}
log.Println(id, name)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}

}

我得到的错误是:

undefined: db in db.Query

当我将逻辑放在 main 函数的 q() 中时,查询有效 - 我假设这是因为函数具有“本地”作用域(这是正确的术语吗?)并且我需要将 db 对象定义为我有主要功能。

如果是这种情况 - 我如何运行 q() 函数而不重复建立数据库连接?这是“指针”进来的地方吗?另外,我仍然不确定符号在这里做什么:

 err := rows.Scan(&id, &name)

谢谢

最佳答案

db var 是在 main func 范围内定义的,因此您的 q func 不会“看到”它。您必须将指针传递给 q 方法。类似的东西:

func q(db *sql.DB) {
...
}

main 中的 db var 已经是指向 sql.DB 结构的指针,因此您只需要执行 q( db) 调用 main 函数,它会工作。

关于pointers - Golang、指针、函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42285817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com