go - 用golang查询的结构替换变量

标签 go

我有这段有效的代码片段:

db, err := sql.Open("mysql", "pwd@tcp(ip:port)/db")
if err != nil {
    panic(err.Error())
}
rows, err := db.Query("select username from users")
if err != nil {
    panic(err.Error())
}
var (
    username string
)
for rows.Next() {
    err = rows.Scan(
        &name,
    )
    if err != nil {
        panic(err)
    }
    fmt.Println(username)
}

但是,……有没有可能替代

var (
    username string
)

和 错误 = 行.扫描( &姓名, )

有一个结构?

我问这个是因为每次我想添加新字段时都需要

  • 在查询中添加字段
  • 在“var” block 中创建新变量
  • 添加要扫描的变量

我可以只在一个地方定义结构和更新字段吗?或者,...是否有一些最佳实践来构建查询并获取它们?

最佳答案

你可以这样做:

type user struct {
    Name  string
    Pass  string
    Email string
    Age   int
}

func main() {
    db, err := sql.Open("mysql", "pwd@tcp(ip:port)/db")
    if err != nil {
        panic(err.Error())
    }
    rows, err := db.Query("select user, pass, email, age from users")
    if err != nil {
        panic(err.Error())
    }
    var (
        users []user
    )
    for rows.Next() {
        u := user{}
        err = rows.Scan(
            &u.Name, &u.Pass, &u.Email, &u.Age,
        )
        if err != nil {
            panic(err)
        }

        users = append(users, u)
    }
    fmt.Println(users)
}

关于go - 用golang查询的结构替换变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45453890/

相关文章:

go - Websocket 在 Echo Framework 中向所有客户端发送消息

linux - 如何优雅地关闭在 Kubernetes 上运行的 Go 服务

go - 为什么不能转换 Slice 类型?

go - 将未知长度的 slice 中的值分配给 Go 中的结构体?

go - 如何在 Go 中读取 like []interface{} 的一部分?

go - 我应该在 hystrix.Do 的 hystrix-go 包的运行参数中使用哪个 ctx?来自上层的 ctx,还是 context.Background()?

docker - 找不到主模块;见 'go help modules'

http - 如何倒带 io.ReadCloser

mysql - 微服务中心化数据库模型

google-chrome - 如何确保 PC 可以上网然后启动 exec?