这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
今天学习了Go语言的三个框架,一个是一个数据库持久化框架,一个是一个RPC框架,以及最后一个是一个HttpWeb框架。
Gorm框架
Gorm是Go语言很常用的的一个ORM框架,我们学习这个框架,我也学习了不同于Java的另一种数据库持久化框架。之前学习Java的时候,使用的是Mybatis框架,Mybatis框架和Spring配合使用很方便,直接写sql来使用进行sql调用,这种对正常的使用者来说很方便,直接写sql可以让我们清晰的得到结果以及更方便的书写。 但是Gorm是通过语言来调用sql,然后通过函数来链式调用获取信息,然后通过这种方式来完成sql的数据查询,然后在代码里面获取数据以及处理数据,这样对数据库的压力可以减轻,而且我知道了在字节跳动这种体量的公司,可能并不推荐连表查询,也就是使用join来使用多个数据表来获取数据。这样一来我们只能单表查询,然后查询到的数据存到当前服务器的内存里,然后在内存里进行数据处理然后使用api让前端进行调用,这种给我一种提醒。
然后还有一个问题,讲师提到,不要在for循环里面添加数据,以前我在for循环里调用sql查询,查询的效率极低,这可能是我的水平受限。
下面是创建数据库连接,获取数据库连接的对象。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// 用户名:密码@tcp(ip:port)/数据库?charset=utf8mb4&parseTime=True&loc=Local
dsn := "root:root123@tcp(127.0.0.1:3306)/test_gorm?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 释放连接
// db.Close() // 没有这个方法了???
}
然后下面是一些简单的使用。
package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 迁移 schema
db.AutoMigrate(&Product{})
// Create
db.Create(&Product{Code: "D42", Price: 100})
// Read
var product Product
db.First(&product, 1) // 根据整型主键查找
db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录
// Update - 将 product 的 price 更新为 200
db.Model(&product).Update("Price", 200)
// Update - 更新多个字段
db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
// Delete - 删除 product
db.Delete(&product, 1)
}
Gorm使用还是需要以后的继续练习,从mybatis这种持久化框架改成现在这种Gorm框架还是需要一定的时间。
Kitez框架
Kitez框架是一个RPC框架,RPC框架以前没接触过,所以我还是需要很长的时间去理解,这个不是一天两天就可以解决的。
Hertz框架
Hertz框架是一个web框架,之前我学习的web框架,就是Srping框架,这个框架可能不如Spring框架易用,但是Hertz依托于Go语言,所以性能必然不差,但是具体的学习也是需要我课后好好的钻研一下。并且好好的学习一段时间估计才能真正掌握。