这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
今天的课程主要讲的是三个go web中常用的框架
知识点
1.gorm
(1)gorm使用First时,若查询不到数据会返回ErrRecordNotFound,注意与Find区分
(2)gorm可以通过在结构体中添加注解的方式,设置属性默认值
(3)使用struct更新时,只会更新非零值
(4)gorm为链式操作,软删除,可以使用Unscoped查询
(5)数据一致性的事务操作Begin,Commit,Rollback,Tansaction
2.Kitex
(1)为一款RPC框架,支持通过.thrift文件来生成端口
3.Hertz
(1)Http框架,感觉操作上与原生http包类似,毕竟go的原生web包已经算是比较易用(
(2)提供了代码生成工具Hz
举例代码
有关gorm
//User 用户模型
//之前写的一个大概的web程序中的应用例子
type User struct { gorm.Model UserName string `gorm:"unique"` Email string PasswordDigest string NickName string Status string Avatar string `gorm:"size:1000"` Money string}
type UserDao struct { *gorm.DB}
func NewUserDao(ctx context.Context) *UserDao { return &UserDao{NewDBClient(ctx)}}
func NewUserDaoByDB(db *gorm.DB) *UserDao { return &UserDao{db}}
// ExitOrNotByUserName 判断是否存在该名字func (dao *UserDao) ExitOrNotByUserName(userName string) (user *model.User, exist bool, err error) { var count int64 err = dao.DB.Model(&model.User{}).Where("user_name=?", userName).Find(&user).Count(&count).Error if count == 0 { return nil, false, err } return user, true, nil}
func (dao *UserDao) CreateUser(user *model.User) error { return dao.DB.Model(&model.User{}).Create(&user).Error}
// GetUserById 用id获得用户信息func (dao *UserDao) GetUserById(id uint) (user *model.User, err error) { err = dao.DB.Model(&model.User{}).Where("id=?", id).First(&user).Error return}
// UpdateUserById 通过id更新用户信息func (dao *UserDao) UpdateUserById(uId uint, user *model.User) error { return dao.DB.Model(&model.User{}).Where("id=?", uId).Updates(&user).Error}
个人思考
go的gorm是我接触到的第一款有关数据库操作的框架(
用起来在我的感觉里还蛮方便的,因为不太需要考虑数据库与数据库之间的差别,sql语句也不需要自己设计(懒惰,而且怕写错),把操作托管给框架的感觉真的很爽(
后面的http框架和rpc框架的话,在使用goframe的时候有看到过类似的组件,但生成代码用的时候感觉还是不很熟练,自己感觉中还是自己编写如model,dao等服务的代码会好一点