Go语言连接数据库
本文以mariadb为例,从数据库服务搭建到使用go语言连接数据库做简单示例。
一、数据库服务搭建(os采用cent os 7)
1.mariadb安装、启动
# 安装数据库服务端 yum install mariadb-server # 启动数据库服务端 systemctl enable --now mariadb
2.数据库初始化
# 示例采用root用户远程访问数据库,注意需要允许root远程登陆:Disallow root login remotely? [Y/n] n mysql_secure_installation
3.创建数据库
# 进入数据库 mysql -uroot -p # 创建名为goTest的数据库 create database goTest; # 切换到goTest库中 use goTest; # 创建一个userInfo表并设置数据结构 create table userInfo (id varchar(10), name varchar(10), score varchar(10)); # 查看创建的userInfoi表 show tables; # 插入数据; insert into userInfo (id,name,score) values ('001', 'john', '83.5'); insert into userInfo (id,name,score) values ('002', 'jack', '75'); insert into userInfo (id,name,score) values ('003', 'Amy', '93'); nsert into userInfo (id,name,score) values ('004', 'jim', '93'); # 查看表 select * from userInfo; # 修改uesrInfo表中Amy为amy update userInfo set name='amy' where id='003';
4.配置权限,允许其他主机连接
# 切换mysql use mysql; # 授权任意主机登录 update user set host='%' where user='root' and host='localhost';
5.为确保下面的实验顺利进行,需要关闭防火墙服务。cent os 7默认防火墙是firewalld
systemctl stop firewalld
二、Go语言连接数据库
Go语言内置database/sql包提供了数据库的通用接口,必须同数据库驱动一起使用。但是Go标准库并没有提供数据库驱动,为此,需要先安装数据库驱动
go get github.com/go-sql-driver/mysql@latest
下面编写demo访问1.3中创建测userInfo
import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:******@tcp(192.168.8.131:3306)/goTest") if err != nil { fmt.Println(err) return } defer func() { err = db.Close() if err != nil { fmt.Println(err) return } }() sqlQuery(db, "userInfo") } func sqlQuery(db *sql.DB, table string) { rows, _ := db.Query(fmt.Sprintf("select * from %s", table)) columns, err := rows.Columns() if err != nil { fmt.Println(err) } values := make([]sql.RawBytes, len(columns)) scanArgs := make([]interface{}, len(values)) for i := range values { scanArgs[i] = &values[i] } var contents [][]string for rows.Next() { var s []string err = rows.Scan(scanArgs...) if err != nil { fmt.Println(err) } for _, v := range values { s = append(s, string(v)) } contents = append(contents, s) } fmt.Println(contents) } // [[001 john 83.5] [002 jack 75] [003 amy 93] [004 jim 93]]
database/sql包官方文档:https://pkg.go.dev/database/sql#pkg-overview