最近在看goframe的官方发的demo学习包,其中多个子包都定义了个空结构体的全局变量。这个用意我想不明白了。
用空结构体是为了包装函数变成方法,可能是出于安全机制考虑,其次用空结构体还有节省点内存的作用。
但是,通过全局变量调用是怎么回事呢?
User.SignUp(....)
// 中间件管理服务
var User = userService{}
type userService struct{}
// 用户注册
func (s *userService) SignUp(r *model.UserServiceSignUpReq) error {
// 昵称为非必需参数,默认使用账号名称
if r.Nickname == "" {
r.Nickname = r.Passport
}
// 账号唯一性数据检查
if !s.CheckPassport(r.Passport) {
return errors.New(fmt.Sprintf("账号 %s 已经存在", r.Passport))
}
// 昵称唯一性数据检查
if !s.CheckNickName(r.Nickname) {
return errors.New(fmt.Sprintf("昵称 %s 已经存在", r.Nickname))
}
if _, err := dao.User.Save(r); err != nil {
return err
}
return nil
}
虽然用全局变量调用方法也是可行的,但这样可能存在并发调用冲突的可能吧?