https://github.com/bonfy/go-mega/blob/master/05-database.md
然后这里涉及了gorm的相关知识
还是去b站上面修炼一下吧,gorm
ORM是啥?
我们讨论一下我们设置的struct
user表:
id
username
password_hash :使用哈希密码来提高安全性
post表(用户动态):
id
body
timestamp
user_id,这个是个链接,用来得到作者的id,是一个外键,每发一个动态都会链接到这个作者。
一个用户可以发多条动态,所以这是一个一对多的关系
粉丝:多个粉丝对应多个用户
这里我们需要了解一下config文件夹一般存储哪些内容:
config一般是指应用程序的配置文件。配置文件用于存储应用程序的参数,设置和选项
config文件是一种用于存储应用程序配置信息的文件,它可以帮助应用程序在不同环境下进行配置和部署
然后我们引入了一个viper的包,viper是一个Go语言库,用于处理配置文件的工具,用来解析和使用配置文件
yml文件就是YAML,设计目标 是使数据表达更加简介
-
层级结构: YAML 使用缩进表示层级结构,子项相对于父项缩进。这种结构使得数据更易读、更易理解。
-
键值对: YAML 使用键值对表示数据,键与值之间用冒号分隔。值可以是字符串、数字、布尔值等基本数据类型,也可以是列表或字典等复杂数据类型。
-
列表: 列表使用连字符(减号)表示,每个元素占一行,位于连字符后面并缩进一个空格。
-
注释: YAML 支持单行注释(以井号 "#" 开头)和多行注释(以 "/" 开头,以 "/" 结尾)。
-
字典: 字典使用冒号分隔键值对,每个键值对占一行,键值对之间缩进一个空格。
-
数据类型: YAML 支持多种数据类型,包括字符串、整数、浮点数、布尔值、列表、字典等,以及特殊值如 null。
func GetMysqlConnectingString() string {
usr := viper.GetString("mysql.user")
pwd := viper.GetString("mysql.password")
host := viper.GetString("mysql.host")
db := viper.GetString("mysql.db")
charset := viper.GetString("mysql.charset")
return fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?charset=%s&parseTime=true", usr, pwd, host, db, charset)
}
注意一下这里代码的最后一行,记得/不能少
users := []model.User{
{
Username: "bonfy",
PasswordHash: model.GeneratePasswordHash("abc213"),
Posts: []model.Post{
{Body: "Beautiful day in China"},
},
},
{
Username: "JackieChen",
PasswordHash: model.GeneratePasswordHash("chaojie666"),
Posts: []model.Post{
{Body: "I hope I will be braver"},
{Body: "Hope you so"},
},
},
}
for _, u := range users {
db.Debug().Create(&u) //这里启用调试模式,意味着执行数据库操作会输出相应的SQL语句
}
for循环里面的Debug方法很神奇