linux

Golang在Linux下的数据库操作指南

小樊
45
2025-08-27 14:31:41
栏目: 编程语言

以下是Golang在Linux下操作数据库的指南,以MySQL为例,其他数据库(如PostgreSQL、MongoDB)可参考对应驱动调整。

一、环境准备

  1. 安装Go环境
    通过包管理器安装,如Ubuntu/Debian:

    sudo apt update && sudo apt install golang
    

    或手动安装:Go官方下载

  2. 安装数据库

    • MySQL
      sudo apt install mysql-server
      sudo systemctl start mysql && sudo systemctl enable mysql
      
    • PostgreSQL
      sudo apt install postgresql postgresql-contrib
      sudo service postgresql start
      
  3. 安装数据库驱动

    • MySQL驱动
      go get -u github.com/go-sql-driver/mysql
      
    • PostgreSQL驱动
      go get -u github.com/lib/pq
      

二、基础数据库操作

1. 连接数据库

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql" // MySQL驱动
)

func main() {
    dsn := "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 测试连接
    if err := db.Ping(); err != nil {
        panic(err)
    }
    fmt.Println("数据库连接成功!")
}

2. CRUD操作

三、进阶操作

1. 连接池配置

db.SetMaxOpenConns(50)    // 最大打开连接数
db.SetMaxIdleConns(10)    // 最大空闲连接数
db.SetConnMaxLifetime(time.Hour) // 连接最大生命周期

2. 预处理语句

stmt, err := db.Prepare("SELECT * FROM users WHERE age > ?")
if err != nil {
    panic(err)
}
defer stmt.Close()

rows, err := stmt.Query(18)
// 处理结果...

3. 事务处理

tx, err := db.Begin()
if err != nil {
    panic(err)
}
defer func() {
    if err != nil {
        tx.Rollback()
        return
    }
    tx.Commit()
}()

_, err = tx.Exec("UPDATE accounts SET balance = balance - ? WHERE id = ?", 100, 1)
if err != nil {
    panic(err)
}

_, err = tx.Exec("UPDATE accounts SET balance = balance + ? WHERE id = ?", 100, 2)
if err != nil {
    panic(err)
}

四、其他数据库操作

1. PostgreSQL示例

连接字符串示例:

dsn := "user=username password=secret dbname=mydb sslmode=disable"
db, err := sql.Open("postgres", dsn)

2. MongoDB示例(需安装驱动)

import (
    "context"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
    client, err := mongo.Connect(context.TODO(), clientOptions)
    if err != nil {
        panic(err)
    }
    defer client.Disconnect(context.TODO())

    collection := client.Database("test").Collection("users")
    // 插入、查询等操作...
}

五、注意事项

  1. 权限管理:确保数据库用户有对应权限,生产环境避免使用root账户。
  2. 错误处理:始终检查err,避免程序因未捕获错误崩溃。
  3. 资源释放:使用defer关闭数据库连接、语句和结果集。
  4. 性能优化:合理配置连接池参数,避免频繁创建连接。

参考资料:

0
看了该问题的人还看了