【go项目01_学习记录09】

1 MySQL驱动

1.1 操作MySQL数据库

Go 操作 MySQL 等数据库,一般有两种方式:

一是利用 database/sql 接口,直接在代码里硬编码 sql 语句;
二是使用 ORM,具体一点是 GORM,以对象关系映射的方式在抽象地操作数据库。

1.2 安装驱动

go get github.com/go-sql-driver/mysql

在这里插入图片描述
filippo.io/edwards25519是一个Go语言的包,用于实现Edwards25519椭圆曲线加密算法。这个包提供了一些功能,可以用于生成密钥对、签名和验证签名等操作。Edwards25519是一种高效、安全的椭圆曲线加密算法,常用于数字签名和密钥交换等安全通信场景。通过使用filippo.io/edwards25519包,开发人员可以方便地在Go语言中使用这种加密算法。

现在代码中还未使用到,所以会有 indirect 这个标示。驱动开始使用时,此标示会消失(由 VSCode 插件自动管理)。
匿名导入:
在这里插入图片描述

因为引入的是驱动,操作数据库时我们使用的是 sql 库里的方法,而不会具体使用到 go-sql-driver/mysql 包里的方法,当有未使用的包被引入时,Go 编译器会停止编译。为了让编译器能正常运行,需要使用 匿名导入 来加载。

在Go语言中,匿名导入是指在导入包时使用下划线(_)代替包名。这种方式的导入不会直接使用导入的包中的任何变量或函数,而是只是为了执行包的初始化函数。这在一些情况下是有用的,比如当我们只关心包的初始化函数被执行,而不需要直接使用包中的其他功能时。另外,匿名导入也可以用于解决包循环导入的问题。通过匿名导入,我们可以在一个包中导入另一个包,而另一个包中也导入了当前包,从而避免了循环导入的问题。

1.3 整理模块

go mod tidy

在这里插入图片描述

2 连接数据库

删除_ "github.com/go-sql-driver/mysql"这行代码
在这里插入图片描述

var db *sql.DB
func initDB(){
	var err error
	config := mysql.Config{
		User: 		"root",
		Passwd: 	"qwer1234",
		Addr: 		"127.0.0.1:3306",
		Net: 		"tcp",
		DBName: 	"goblog",
		AllowNativePasswords: true,
	}
	//准备数据库连接池
	db,err = sql.Open("mysql",config.FormatDSN())
	checkError(err)
	//设置最大连接数
	db.SetMaxOpenConns(25)
	//设置最大空闲连接数
	db.SetMaxIdleConns(25)
	//设置每个连接的过期时间
	db.SetConnMaxLifetime(5 *time.Minute)

	//尝试连接,失败会报错
	err = db.Ping()
	checkError(err)

}
func checkError(err error){
	if err != nil{
		log.Fatal(err)
	}
}

func main(){
	initDB()
	.......
}

3 创建数据库和表

3.1 命令行创建数据库

mysql -P 端口号 -h 主机名或ip地址 -u 用户名 -p
// mysql -P 3306 -h localhost -u root -p
mysql -u root -p
输入密码
创建数据库
CREATE DATABASE goblog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
//编码使用 utf8mb4_unicode_ci 是为了支持存储 Emoji,这在现代化的应用中是必要的。另外支持大小写不敏感(ci 是 Case Insensitive 的缩写)。

3.2 图形化工具创建

在这里插入图片描述

3.3 代码中创建数据表

.
.
.

func createTables() {
    createArticlesSQL := `CREATE TABLE IF NOT EXISTS articles(
    id bigint(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,
    title varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
    body longtext COLLATE utf8mb4_unicode_ci
); `

    _, err := db.Exec(createArticlesSQL)
    checkError(err)
}

func main() {

    initDB()
    createTables()

    .
    .
    .
}

Go 语言中根据首字母的大小写来确定可以访问的权限。无论是函数名、方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。可以简单的理解成,首字母大写是公有的,首字母小写是私有的。使用时,但凡不想作为公有方法提供,皆使用小写字母开头。

在这里插入图片描述


  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值