温馨提示×

ubuntu golang怎样连接数据库

小樊
39
2026-10-28 09:10:51
栏目: 编程语言

在 Ubuntu 上使用 Golang 连接数据库,一般步骤是:安装数据库 → 安装 Go 数据库驱动 → 写代码连接。下面以最常见的 MySQL 和 PostgreSQL 为例说明,并附带 SQLite 作为轻量方案。


一、环境准备(Ubuntu)

1. 安装 Go

sudo apt update
sudo apt install golang-go

验证:

go version

二、连接 MySQL(最常用)

1. 安装 MySQL

sudo apt install mysql-server
sudo systemctl start mysql

2. 安装 Go MySQL 驱动

go get -u github.com/go-sql-driver/mysql

3. 示例代码

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/dbname"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("MySQL connected successfully")
}

三、连接 PostgreSQL

1. 安装 PostgreSQL

sudo apt install postgresql postgresql-contrib

2. 安装驱动

go get -u github.com/lib/pq

3. 示例代码

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/lib/pq"
)

func main() {
    connStr := "user=postgres password=123456 dbname=test sslmode=disable"
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("PostgreSQL connected successfully")
}

四、连接 SQLite(无需服务器)

go get -u github.com/mattn/go-sqlite3
package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/mattn/go-sqlite3"
)

func main() {
    db, err := sql.Open("sqlite3", "./test.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    fmt.Println("SQLite connected")
}

五、使用 ORM(推荐)

如果你不想写原生 SQL,可以使用:

  • GORM
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

示例:

import (
  "gorm.io/gorm"
  "gorm.io/driver/mysql"
)

db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

六、常见问题

1. sql.Open 不报错但连不上?

✅ 一定要调用 db.Ping()

2. 防火墙问题

sudo ufw allow 3306

3. Go 模块问题

go mod init project
go mod tidy

如果你告诉我:

  • 用 哪种数据库
  • 是否用 GORM
  • 本地还是 远程数据库

我可以给你更精确的示例。

0 踩