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

文章目录

    刚开始在 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式