这是我参与「第五届青训营 」伴学笔记创作活动的第7天。
本文章主要是讲解如何使用go调用数据库。由于录播视频直接讲go如何调用数据库,没有讲数据库相关的安装,我打算先介绍数据库安装相关的内容。
一、下载mysql
这里我先说一句,鉴于课程视频当中gorm可以调用的数据库比较自由,不是一定需要mysql,如果有自己安装的数据库,不需要进行这一步。
首先打开网址MySQL官网,下载mysql。这里我们可以选择合适的系统。
这里我使用的是windows系统,直接选择下图中的下载按钮。
点击红框处直接下载
解压刚刚下载的mysql-8.0.32-winx64.zip
配置环境变量。对桌面上的“此电脑”右键,点击属性,点击高级系统设置,点击环境变量,在系统变量中下拉找到Path双击。在Path处末尾如下图把你安装的mysql-8.0.32-winx64的文件夹下的bin文件路径粘贴进来。
打开解压得到的mysql-8.0.32-winx64文件夹,在该目录下新建my.txt
打开my.txt,复制粘贴以下内容。
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\study\mysql\mysql-8.0.16-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
datadir=D:\study\mysql\mysql-8.0.16-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
注意,这里basedir和datadir请输入自己电脑上mysql-8.0.16-winx64的安装路径。Data文件会自动创建的,不需要自己新建。端口直接使用3306就行。
将my.txt文件后缀改为ini。
以管理员身份运行cmd
按顺序输入以下指令(可以先看下面对这些指令介绍)
mysqld --initialize-insecure --user=mysql
mysqld --install
net start mysql
这里由于我已经安装过mysql,会提示mysql已存在。后续我会用自己下载的5.7.37版本作为例子示范。
如果是第一次安装,输入mysqld -–install会出现“service successfully installed.” 输入net start mysql会提示“mysql服务已经启动成功”
如果输入mysqld -–install时跳出Install/Remove of the Service Denied!,说明不是以管理员身份启动的cmd。
输入mysql -u root -p,直接按回车,第一次登录不会出现”Enter password:”。 会出现下列信息
在mysql>后输出exit退出。
设置密码,输入mysqladmin -u root -p password,这里第一次设置密码也不会出现”Enter password“
第一句话New password指输入新密码,第二局Confirm new password指确认密码,也就是把新密码再重新输入一遍。请务必记住密码,账户名称默认root。
再次输入mysql -u root -p,这时会出现Enter passwor。输入密码验证,如果跳出跟第一次一模一样的信息则密码设置成功。在mysql>后面输入exit退出,关闭cmd。
这里我更推荐去看这篇博客,文中有些报错信息我没遇到。这篇博客的作者介绍的更加完善,甚至对一些报错方法有一定的应对措施。
MySQL+Navicat安装配置_Lorrey_的博客-CSDN博客_navicat配置文件在哪
二、安装navicat
这里首先要介绍一下,navicat是一款MySQL图形化管理工具。它能够展示数据库中的数据,方便我们观察数据的增删改查操作。 这里我提供网盘下载链接,其中激活码也放在压缩包里面。
提取码:vo5a
很遗憾,我很早之前安装过该软件,只记得需要把里面的key值输入进去激活该软件,但是忘记了安装过程。这里建议去网上搜索navicat安装教程,我没有搜到与我安装的navicat相同版本的教程。
三、建立数据库连接
双击已经激活的navicat.exe
点击连接
把刚刚mysql输入的登录密码输入其中,连接名可以随便取一个。
单击连接测试,如果提示连接成功说明可以使用mysql。
点击下方的确定,左边目录会新增一个test连接
双击test会展示该连接下的所有数据库,然后右键test,选择新建数据库,输入一个数据库名称,字符集和排序规则可以为空。
test目录下会出现gorm数据库,双击gorm,点击表,点击新建表
按图输入以下信息,这里可以通过添加栏位新建列名,记得给ID最右边点一下,会有一个钥匙出现(象征着主键),主键不允许空值。
保存,输入表名。由于今天课程中gorm使用提到是结构体匹配蛇形复数,因此表名设置为users,也就是结构体User的复数形式。这里是通过结构体的名称来匹配表名,表名设置有严格要求,不然会匹配不到。
点击确定,叉掉表设计,即可看到新建的表users。如果表名输错这里可以右键"users"选择重命名修改表名。
四、调用gorm库
打开go相关的编译器,这里我使用的是vscode,go版本为1.17。
在终端进入需要编译的文件夹目录下,输入go mod init
输入以下两行命令
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
打开go.mod可以看到我们get的库安装成功
该目录下新建一个main.go,复制粘贴下文代码。
请自行修改dsn中的参数,其中”user:password”和”dbname”请替换为图中自己连接时输入的用户名密码以及数据库名称。比如你的用户名是root,密码是1234,数据库名称是前面设置的gorm(不是下图的连接名称test,也不是表名users),你的dsn设置为"root:1234@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local"
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct{
ID int `gorm:"primarykey"`
Name string `gorm:"column:name"`
Age int `gorm:"column:age"`
}
func main(){
// 用户名:密码@tcp(ip:port)/数据库?charset=utf8 &parseTime=True&loc=Local
dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err!= nil {
fmt.Println(err)
fmt.Println("failed to connect database")
}
user := User{Name: "test", Age: 20, ID: 2}
result := db.Create(&user)
fmt.Println(result.Error)
fmt.Println(user.ID)
}
在该目录下运行代码,go run main.go,出现下图结果说明插入成功。nil表示没有错误。
回到navicat,打开gorm数据库下的users表,可以看到刚刚插入数据(1,test,20)。
这里我提几个可能出现的报错信息。
1.表名查询不到
表名可能没有遵从蛇形复数规则,这里要在navicat里面把表名改为结构体名称+s,例如db.create里面放的参数是user结构体的指针,则表名必须是users。
2.数据库名称无法识别
大概率是把表名称和连接名称放入。
总结
可以去gorm的官网链接查询go相关的使用数据库方法,
参考
链接放文中了
除此之外还有一篇有关gorm使用的