在 CentOS 上让 Go 程序连上数据库,核心并不复杂,真正容易出错的通常是运行环境、驱动依赖和连接串细节。本文按“先装 Go、再装驱动、最后分别连接 MySQL 和 PostgreSQL”的顺序整理步骤,并补上连接成功后的验证方法与排查重点,方便你快速判断问题究竟出在代码、配置还是系统网络层。
先在 CentOS 上准备 Go 环境
如果系统里还没有安装 Golang,可以先下载并解压到 /usr/local,然后把可执行文件目录加入环境变量。原文使用的版本是 go1.16.5,版本号可以按需调整,但不建议使用过旧版本。
wget https://golang.org/dl/go1.16.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
安装完成后,先执行 go version 确认 Go 已经可以正常使用,再继续后面的数据库连接步骤。
安装 MySQL 和 PostgreSQL 驱动
Go 通过标准库 database/sql 统一操作数据库,但具体连接哪一种数据库,还需要安装对应驱动。这里分别使用:

- MySQL:
github.com/go-sql-driver/mysql - PostgreSQL:
github.com/lib/pq
直接执行下面的命令即可安装:
go get -u github.com/go-sql-driver/mysql
go get -u github.com/lib/pq
如果当前机器网络环境受限,go get 可能会失败,这时需要额外处理依赖下载问题。不过就本文流程而言,重点仍然是先确认驱动名称和安装命令没有写错。
Golang 连接 MySQL:最小示例与连接串说明
准备一个 main.go 文件,先看 MySQL 版本的示例代码。它使用 sql.Open 创建连接句柄,再通过 db.Ping() 主动检查数据库是否真的可达。
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
dsn := "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Connected to MySQL!")
}
MySQL DSN 里需要替换哪些字段
这段连接串里的几个字段都需要按实际环境修改:
username:数据库用户名password:数据库密码localhost:数据库主机地址3306:MySQL 默认端口dbname:目标数据库名
此外,charset=utf8mb4、parseTime=True、loc=Local 这些参数通常也会保留下来,尤其是在处理中文和时间字段时更实用。
Golang 连接 PostgreSQL:示例代码与 SSL 提醒
如果目标数据库是 PostgreSQL,代码结构基本一致,主要差别在驱动导入路径和连接字符串格式。

package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func main() {
connStr := "user=username dbname=dbname password=password sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Connected to PostgreSQL!")
}
PostgreSQL 连接串的关键项
和 MySQL 一样,下面这些字段都要换成你的真实配置:
user=username:数据库用户名dbname=dbname:数据库名称password=password:数据库密码- 端口默认是
5432
需要额外注意的是 sslmode=disable。这个设置适合开发环境快速验证连接,但如果是生产环境,通常应改用 require 或 verify-full,避免直接关闭 SSL 校验。
运行程序并确认连接是否成功
完成代码后,进入 main.go 所在目录,直接执行:
go run main.go
如果连接的是 MySQL,成功时会看到:
Connected to MySQL!
如果连接的是 PostgreSQL,成功时会看到:
Connected to PostgreSQL!
看到这类输出,就说明 Go 程序已经通过驱动成功连上目标数据库。
连不上时优先检查这几项
从实际排查经验看,数据库连接失败并不一定是 Go 代码本身的问题。只要驱动安装正确、连接串填写无误,更多时候问题出在系统环境或服务配置上。

- 确认数据库服务已经启动
- 确认监听端口是否正确开放
- 确认防火墙没有拦截对应端口
- 确认主机地址、用户名、密码和数据库名填写正确
如果你的程序在 sql.Open 阶段没有报错,但 db.Ping() 失败,通常就该优先从网络连通性、权限和数据库服务状态这几个方向入手。









