golang mysql scan_Golang 从 MySQL 数据库读取一条数据

本文介绍了如何使用 Golang 的 database/sql 包从 MySQL 数据库中读取一条数据,包括环境配置、结构体定义、QueryRow 方法及 Scan 函数的使用,展示了具体的测试代码和执行结果。
摘要由CSDN通过智能技术生成

刚开始在 sqlx 和 gorm 两者间纠结了半天,准备使用 sqlx 了,看了文档,感觉就是灾难般的文档。

我按照例子硬是没有从 MySQL 读出数据。

又尝试了 gorm,这家伙的文档更加不友好,概念更多。调试了半天,返回的结果 id 永远是 0。我半天没有找到问题。

最终我选择了 database/sql。

http://go-database-sql.org/index.html

参考最友好的一篇使用文档:

https://tutorialedge.net/golang/golang-mysql-tutorial/

测试代码

package main

import (

"database/sql"

"fmt"

_ "github.com/go-sql-driver/mysql"

"github.com/joho/godotenv"

"log"

"os"

)

type KV struct {

id int

key string

value string

updated_at string

}

func main() {

err := godotenv.Load("../.env")

if err != nil {

log.Fatal("Error loading .env file")

}

db_database := os.Getenv("DB_DATABASE")

db_username := os.Getenv("DB_USERNAME")

db_password := os.Getenv("DB_PASSWORD")

db_host := os.Getenv("DB_HOST")

db_port := os.Getenv("DB_PORT")

db, err := sql.Open("mysql",

fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&timeout=5000ms",

db_username, db_password, db_host, db_port, db_database))

if err != nil {

log.Fatal("Error")

}

defer db.Close()

var kv KV

err = db.QueryRow("SELECT id, `key`, value, updated_at FROM kv where id = ?",

2).Scan(&kv.id, &kv.key, &kv.value, &kv.updated_at)

if err != nil {

panic(err.Error())

}

log.Println(kv.id)

log.Println(kv.key)

log.Println(kv.value)

log.Println(kv.updated_at)

}

执行结果:

> go run main.go

2019/10/23 19:29:33 2

2019/10/23 19:29:33 translate_color_name

2019/10/23 19:29:33 4

2019/10/23 19:29:33 2019-09-08 16:31:51

需要注意的地方:

定义 struct

结果使用 Scan

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值