在 Debian 上用 Go 访问数据库,核心并不复杂,难点主要集中在环境变量、驱动选择和连接信息是否写对。下面按照“先装环境、再装驱动、最后写代码并验证”的顺序梳理一遍,读完后你可以快速判断自己卡在安装、连接还是查询结果处理这一步。
在 Debian 上安装 Go 环境
如果系统里还没有 Go,可以先更新软件索引,再直接安装发行版提供的 golang-go 包:
sudo apt update
sudo apt install golang-go
这一步完成后,系统就具备了运行和编译 Go 程序的基础环境。后续要连接数据库,还需要把工作目录和可执行路径配置好。
配置 GOROOT、GOPATH 和 PATH
Go 程序能否顺利找到工具链和工作空间,通常取决于 GOROOT、GOPATH 以及 PATH 是否正确。常见做法是把下面几行加入 ~/.bashrc 或 ~/.profile:

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
写入后执行下面的命令让配置立即生效:
source ~/.bashrc
或者:
source ~/.profile
这里可以顺手理解一下两者的作用:GOROOT 指向 Go 安装位置,GOPATH 主要用于你的工作空间,而 PATH 则决定终端能否直接找到 go 命令及相关工具。
按数据库类型安装对应驱动
Go 标准库里的 database/sql 提供的是通用接口,真正连接哪种数据库,还要安装对应驱动。不同数据库的命令不同,直接按你的目标类型选择即可。
MySQL 驱动
go get -u github.com/go-sql-driver/mysql
PostgreSQL 驱动
go get -u github.com/lib/pq
SQLite 驱动
go get -u modernc.org/sqlite
如果你只是想先把流程跑通,通常可以先选自己最熟悉的数据库;若按本文示例直接测试,则使用的是 MySQL 驱动。
编写 Go 数据库连接与查询示例
环境和驱动准备好之后,就可以新建一个 main.go,用 database/sql 完成连接、连通性检查和查询。下面这段代码保留了最基础的完整流程,适合先确认“能不能连上”和“能不能读出结果”:

package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 连接数据库
dsn := "user:password@tcp(localhost:3306)/dbname"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err.Error())
}
defer db.Close()
// 测试连接
err = db.Ping()
if err != nil {
panic(err.Error())
}
fmt.Println("Connected to the database!")
// 执行查询
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
panic(err.Error())
}
defer rows.Close()
// 遍历结果集
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
panic(err.Error())
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
// 检查遍历时是否有错误
if err = rows.Err(); err != nil {
panic(err.Error())
}
}
这段示例里有几个关键点:
sql.Open("mysql", dsn)负责初始化连接信息,其中dsn里的用户名、密码、主机、端口和库名都需要替换成你的实际配置。db.Ping()用来确认数据库当前可达,能把很多连接参数错误提前暴露出来。db.Query("SELECT id, name FROM users")用于执行查询,随后通过rows.Next()和rows.Scan()逐行读取结果。- 最后的
rows.Err()不要省略,它可以补充捕获遍历结果集期间发生的错误。
运行程序前后要检查什么
进入 main.go 所在目录后,直接运行:
go run main.go
如果程序没有按预期连上数据库,优先检查下面几项:
- 数据库服务是否已经启动。
- 连接信息是否正确,包括用户名、密码、主机地址、端口和库名。
- 本机或服务器的防火墙是否限制了数据库端口访问。
换句话说,Go 端的代码流程通常不是最容易出错的部分,真正影响成败的往往是环境配置和数据库侧的连接条件。只要安装完成、驱动选对、DSN 写对,这个最小示例一般就能顺利跑通。













