Golang 从 MySQL 数据库读取一条数据

更新日期: 2019-10-23 阅读次数: 2212 字数: 243 分类: golang

刚开始在 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
领取618阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年06月05日 世界环境日
2020年06月05日 芒种
2020年06月06日 全国爱眼日
2020年06月11日 中国人口日
2020年06月20日 世界难民日
2020年06月21日 父亲节
2020年06月21日 夏至
2020年06月22日 中国儿童慈善活动日
2020年06月23日 国际奥林匹克日
2020年06月25日 全国土地日
2020年06月25日 端午节
2020年06月26日 国际禁毒日
查看更多节日