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

更新日期: 2019-10-23 阅读次数: 3696 字数: 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
领取阿里云/腾讯云服务器优惠券

关于作者

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

相关文章

爱评论不评论

近期节日

2020年10月31日 世界勤俭日
2020年11月01日 万圣节
2020年11月07日 立冬
2020年11月08日 中国记者日
2020年11月10日 世界青年节
2020年11月11日 光棍节
2020年11月14日 世界糖尿病日
2020年11月17日 国际大学生节
2020年11月20日 国际儿童日
2020年11月21日 世界问候日
2020年11月22日 小雪
2020年11月26日 感恩节
查看更多节日