Go的第19课——Go对mysql的操作

对于包的理解

终于是对包这个东西有点概念了。首先我们直接导包,只会去 GOROOT 当中寻找,GOROOT 就是你安装 go 的一个地方,当然我们如果写的项目太大了肯定是要分很多包的,直接写在 GOROOT 里面又感觉很难受。

那么此时是这样的,我们要新建一个项目,这个项目作为文件夹,然后里面再建包,新建一个 go.mod 文件,内容就是

1
2
3
module [projectname]

go [go version]

比如我的项目名称为 xia0ji233,那么我的 go.mod 就是这样的内容:

1
2
3
module xia0ji233

go 1.19

里面新建的文件夹就会被作为包啦,要引用的时候就是 import "xia0ji233/pkgname"

环境准备

mysql就不说了官网上直接下,主要说说驱动下载,这里建议直接去 github 官网搞下来,这里贴一个 link

然后像刚刚那样,新建一个项目,把源码目录改名为 mysql 放入项目文件夹即可,只要能引用就可以了。

连接数据库

然后再要一个 database/sql 的包,就可以建立一个数据库对象,这个数据库对象只是指定了数据库类型,数据库账号,密码,以及连接的一些参数。

然后使用 Ping() 去测试一下连通性,以及账号密码是否正确

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"database/sql"
"fmt"
_ "xia0ji233/mysql"
)

func main() {
db, _ := sql.Open("mysql", "root:123@tcp(127.0.0.1:3306)/mysql")
defer db.Close()
err := db.Ping()
fmt.Println(err)
}
//这里故意输错密码打印一下err
/*
Error 1045: Access denied for user 'root'@'localhost' (using password: YES)
*/

连接成功之后,我们就可以使用 db 里面的一些接口来增删改查了。

增删改查

增删改

增删改调用的接口一模一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"database/sql"
_ "xia0ji233/mysql"
)

func main() {
db, _ := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/go_db")
defer db.Close()
sql := "INSERT INTO test VALUES(2)"
_, _ = db.Exec(sql)
}

需要使用一个接口 Scan,传一个字符串地址获取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
"database/sql"
"fmt"
_ "xia0ji233/mysql"
)

func main() {
db, _ := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/go_db")
defer db.Close()
sql := "select * from test"
var id string
rs, _ := db.Query(sql)
defer rs.Close()
for rs.Next() {
rs.Scan(&id)
fmt.Println(id)
}
}
/*
1
2
*/

QueryRow 只会查询出一行,Query 可以查多行。

注意一下查多行的一个写法。