Go 框架三件套详解(Web/RPC/ORM)| 青训营笔记

66 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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等服务的代码会好一点