【Go语言快速上手】第二部分:Go语言进阶之数据库操作
- 软件开发
- 2025-08-26 20:21:02

文章目录 前言:数据库操作一、使用 `database/sql` 包操作关系型数据库1.1 连接数据库1.1.1 安装 MySQL 驱动1.1.2 连接到 MySQL 数据库 1.2 执行 SQL 查询1.2.1 查询单行数据1.2.2 查询多行数据 1.3 执行 SQL 插入、更新和删除插入数据1.3.1 更新数据1.3.2 删除数据 二、使用 NoSQL 数据库2.1 使用 MongoDB2.1.1 安装 MongoDB 驱动2.1.2 连接到 MongoDB 并执行查询 2.2 使用 Redis2.2.1 安装 Redis 驱动2.2.2 连接到 Redis 并执行操作 前言:数据库操作
Go 语言通过内置的 database/sql 包支持关系型数据库的操作,同时也支持通过第三方库与 NoSQL 数据库进行交互。你可以通过标准的 SQL 操作与关系型数据库(如 MySQL、PostgreSQL)进行交互,也可以使用专门的库来连接 NoSQL 数据库(如 MongoDB、Redis)。本篇博客将介绍如何在 Go 中操作关系型数据库与 NoSQL 数据库。
一、使用 database/sql 包操作关系型数据库
Go 的 database/sql 包提供了一个统一的接口,允许与多种关系型数据库(如 MySQL、PostgreSQL 等)进行交互。你可以通过 database/sql 包提供的 API 执行 SQL 查询、插入、更新和删除等操作。
1.1 连接数据库首先,你需要安装并导入适用于数据库的驱动,例如对于 MySQL,你可以使用 github /go-sql-driver/mysql 驱动,针对 PostgreSQL,可以使用 github /lib/pq。
1.1.1 安装 MySQL 驱动 go get -u github /go-sql-driver/mysql 1.1.2 连接到 MySQL 数据库 package main import ( "fmt" "log" "database/sql" _ "github /go-sql-driver/mysql" ) func main() { // 连接数据库 dsn := "root:password@tcp(127.0.0.1:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 测试数据库连接 if err := db.Ping(); err != nil { log.Fatal(err) } fmt.Println("Successfully connected to MySQL database") } 1.2 执行 SQL 查询执行 SQL 查询时,使用 Query 或 QueryRow 方法获取数据。
1.2.1 查询单行数据 package main import ( "fmt" "log" "database/sql" _ "github /go-sql-driver/mysql" ) func main() { dsn := "root:password@tcp(127.0.0.1:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 查询单行数据 var name string err = db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name) if err != nil { log.Fatal(err) } fmt.Println("Name:", name) } 1.2.2 查询多行数据 package main import ( "fmt" "log" "database/sql" _ "github /go-sql-driver/mysql" ) func main() { dsn := "root:password@tcp(127.0.0.1:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() rows, err := db.Query("SELECT id, name FROM users") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var id int var name string if err := rows.Scan(&id, &name); err != nil { log.Fatal(err) } fmt.Println(id, name) } if err := rows.Err(); err != nil { log.Fatal(err) } } 1.3 执行 SQL 插入、更新和删除 插入数据 package main import ( "fmt" "log" "database/sql" _ "github /go-sql-driver/mysql" ) func main() { dsn := "root:password@tcp(127.0.0.1:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 插入数据 result, err := db.Exec("INSERT INTO users(name) VALUES(?)", "Alice") if err != nil { log.Fatal(err) } lastInsertID, err := result.LastInsertId() if err != nil { log.Fatal(err) } fmt.Println("Inserted record with ID:", lastInsertID) } 1.3.1 更新数据 package main import ( "fmt" "log" "database/sql" _ "github /go-sql-driver/mysql" ) func main() { dsn := "root:password@tcp(127.0.0.1:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 更新数据 result, err := db.Exec("UPDATE users SET name = ? WHERE id = ?", "Bob", 1) if err != nil { log.Fatal(err) } affectedRows, err := result.RowsAffected() if err != nil { log.Fatal(err) } fmt.Println("Affected rows:", affectedRows) } 1.3.2 删除数据 package main import ( "fmt" "log" "database/sql" _ "github /go-sql-driver/mysql" ) func main() { dsn := "root:password@tcp(127.0.0.1:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 删除数据 result, err := db.Exec("DELETE FROM users WHERE id = ?", 1) if err != nil { log.Fatal(err) } affectedRows, err := result.RowsAffected() if err != nil { log.Fatal(err) } fmt.Println("Affected rows:", affectedRows) }二、使用 NoSQL 数据库
Go 语言也支持与 NoSQL 数据库进行交互,如 MongoDB 和 Redis。我们将介绍如何使用 Go 操作这两种数据库。
2.1 使用 MongoDBMongoDB 是一个文档型 NoSQL 数据库,可以通过 go.mongodb.org/mongo-driver 驱动与 MongoDB 进行交互。
2.1.1 安装 MongoDB 驱动 go get go.mongodb.org/mongo-driver/mongo 2.1.2 连接到 MongoDB 并执行查询 package main import ( "fmt" "log" "context" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { log.Fatal(err) } defer client.Disconnect(context.TODO()) collection := client.Database("testdb").Collection("users") var result map[string]interface{} err = collection.FindOne(context.TODO(), map[string]interface{}{"name": "Alice"}).Decode(&result) if err != nil { log.Fatal(err) } fmt.Println("Found user:", result) } 2.2 使用 RedisRedis 是一个键值存储数据库,可以使用 github /go-redis/redis/v8 库与 Redis 进行交互。
2.2.1 安装 Redis 驱动 go get github /go-redis/redis/v8 2.2.2 连接到 Redis 并执行操作 package main import ( "fmt" "log" "github /go-redis/redis/v8" "context" ) func main() { rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", // Redis 地址 }) ctx := context.Background() // 设置键值对 err := rdb.Set(ctx, "name", "Alice", 0).Err() if err != nil { log.Fatal(err) } // 获取键值对 val, err := rdb.Get(ctx, "name").Result() if err != nil { log.Fatal(err) } fmt.Println("name:", val) }【Go语言快速上手】第二部分:Go语言进阶之数据库操作由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Go语言快速上手】第二部分:Go语言进阶之数据库操作”
上一篇
C++中的线程同步方式