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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务