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
查看18道真题和解析