我的编程空间,编程开发者的网络收藏夹
学习永远不晚

go-micro微服务domain层开发示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

go-micro微服务domain层开发示例详解

一 domain层介绍说明

  • domain层专注于数据库数据领域开发,我们把数据库相关操作全部写在domain层。
  • model层:数据表字段定义与开发
  • repository层:数据库数据CURD操作
  • service层:数据库相关业务操作
  • 对于复杂的业务操作,这样可以使业务逻辑更加清晰,有利于后期开发与维护。

二 model层开发

  • 在model目录下新建 user.go 文件
package model
import (
   "time"
)
type User struct {
   //主键
   ID int64 `gorm:"primary_key;not_null;auto_increment" json:"id"`
   UserID int64 `gorm:"unique_index;not_null" json:"user_id"`
   UserName string `gorm:"unique_index;not_null" json:"username"`
   FirstName string `json:"first_name"`
   LastName string `json:"last_name"`
   PassWord string `json:"password"`
   Permission int64 `json:"permission"`
   CreateDate time.Time `json:"create_date"`
   UpdateDate time.Time `json:"update_date"`
   IsActive int64 `json:"is_active"`
   Email string `json:"email"`
}

三 repository层开发

在repository层开发目录下新建 user_repository.go 文件

repository层包含功能:

  • InitTable 初始化数据表
  • FindUserByName 根据用户名称查找用户信息
  • FindUserByID 根据用户ID查找用户信息
  • CreateUser 创建用户
  • DeleteUserByID 根据用户ID删除用户
  • UpdateUser 更新用户信息
  • FindAll 查找所有用户
  • ResetPwd 重置密码
  • GetPermission 获取权限
  • UpdatePermission 修改权限
  • EnableUser 启用账号
  • DisableUser 禁用账号
package repository
import (
   "account/domain/model"
   "github.com/jinzhu/gorm"
)
type IUserRepository interface {
   // InitTable 初始化数据表
   InitTable() error
   // FindUserByName 根据用户名称查找用户信息
   FindUserByName(string) (*model.User, error)
   // FindUserByID 根据用户ID查找用户信息
   FindUserByID(int64) (*model.User, error)
   // CreateUser 创建用户
   CreateUser(*model.User) (int64, error)
   // DeleteUserByID 根据用户ID删除用户
   DeleteUserByID(int64) error
   // UpdateUser 更新用户信息
   UpdateUser(*model.User) error
   // FindAll 查找所有用户
   FindAll() ([]model.User, error)
   // ResetPwd 重置密码
   ResetPwd(int64, string) error
   // GetPermission 获取权限
   GetPermission(int64) (int64, error)
   // UpdatePermission 修改权限
   UpdatePermission(int64, int64) error
   // EnableUser 启用账号
   EnableUser(int64) error
   // DisableUser 禁用账号
   DisableUser(int64) error
}
// NewUserRepository 创建UserRepository
func NewUserRepository(db *gorm.DB) IUserRepository {
   return &UserRepository{mysqlDb: db}
}
type UserRepository struct {
   mysqlDb *gorm.DB
}
// InitTable 初始化表
func (u *UserRepository) InitTable() error {
   return u.mysqlDb.CreateTable(&model.User{}).Error
}
// FindUserByName 根据用户名称查找用户信息
func (u *UserRepository) FindUserByName(name string) (user *model.User, err error) {
   user = &model.User{}
   return user, u.mysqlDb.Where("username=?", name).Find(user).Error
}
// FindUserByID 根据用户ID查找用户信息
func (u *UserRepository) FindUserByID(userID int64) (user *model.User, err error) {
   user = &model.User{}
   return user, u.mysqlDb.Where("user_id=?", userID).Find(user).Error
}
// CreateUser 创建用户
func (u *UserRepository) CreateUser(user *model.User) (userID int64, err error) {
   return user.ID, u.mysqlDb.Create(user).Error
}
// DeleteUserByID 删除用户
func (u *UserRepository) DeleteUserByID(userID int64) error {
   return u.mysqlDb.Where("user_id=?", userID).Delete(&model.User{}).Error
}
// UpdateUser 更新用户信息
func (u *UserRepository) UpdateUser(user *model.User) error {
   return u.mysqlDb.Model(user).Update(&user).Error
}
// FindAll 查找所有用户
func (u *UserRepository) FindAll() (userAll []model.User, err error) {
   return userAll, u.mysqlDb.Find(&userAll).Error
}
// ResetPwd 重置密码
func (u *UserRepository) ResetPwd(userID int64, Pwd string) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(model.User{PassWord:Pwd}).Error
}
// GetPermission 获取权限
func (u *UserRepository) GetPermission(userID int64) (Permission int64, err error) {
   var user model.User
   return user.Permission,u.mysqlDb.Where("user_id=?",userID).Find(user).Error
}
// UpdatePermission 修改权限
func (u *UserRepository) UpdatePermission(userID int64, Permission int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(model.User{Permission:Permission}).Error
}
// EnableUser 启用账号
func (u *UserRepository) EnableUser(userID int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 1}).Error
}
// DisableUser 禁用账号
func (u *UserRepository) DisableUser(userID int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 0}).Error
}

四 service层开发

在service目录下新建 user_service.go 文件

service层包含功能:

  • AddUser 插入用户
  • DeleteUser 删除用户
  • UpdateUser 更新用户
  • FindUserByName 根据用户名称查找用户信息
  • FindUserByID 根据用户ID查找用户信息
  • CheckPwd 比对账号密码是否正确
  • ResetPwd 重置密码
  • GetPermission 获取权限
  • UpdatePermission 修改权限
  • EnableUser 启用账号
  • DisableUser 禁用账号
package service
import (
   "account/domain/model"
   "account/domain/repository"
   "errors"
   "golang.org/x/crypto/bcrypt"
)
type IUserService interface {
   // AddUser 插入用户
   AddUser(user *model.User) (int64, error)
   // DeleteUser 删除用户
   DeleteUser(int64) error
   // UpdateUser 更新用户
   UpdateUser(user *model.User, isChangePwd bool) (err error)
   // FindUserByName 根据用户名称查找用户信息
   FindUserByName(string) (*model.User, error)
   // FindUserByID 根据用户ID查找用户信息
   FindUserByID(int64) (*model.User, error)
   // CheckPwd 比对账号密码是否正确
   CheckPwd(userName string, pwd string) (isOk bool, err error)
   // ResetPwd 重置密码
   ResetPwd(int64, string) error
   // GetPermission 获取权限
   GetPermission(int64) (int64, error)
   // UpdatePermission 修改权限
   UpdatePermission(int64, int64) error
   // EnableUser 启用账号
   EnableUser(int64) error
   // DisableUser 禁用账号
   DisableUser(int64) error
}
// NewUserService 创建实例
func NewUserService(userRepository repository.IUserRepository) IUserService {
   return &UserService{UserRepository: userRepository}
}
type UserService struct {
   UserRepository repository.IUserRepository
}
// GeneratePassword 加密用户密码
func GeneratePassword(userPassword string) ([]byte, error) {
   return bcrypt.GenerateFromPassword([]byte(userPassword), bcrypt.DefaultCost)
}
// ValidatePassword 验证用户密码
func ValidatePassword(userPassword string, hashed string) (isOk bool, err error) {
   if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
      return false, errors.New("密码比对错误")
   }
   return true, nil
}
// AddUser 插入用户
func (u *UserService) AddUser(user *model.User) (userID int64, err error) {
   pwdByte, err := GeneratePassword(user.PassWord)
   if err != nil {
      return user.ID, err
   }
   user.PassWord = string(pwdByte)
   return u.UserRepository.CreateUser(user)
}
// DeleteUser 删除用户
func (u *UserService) DeleteUser(userID int64) error {
   return u.UserRepository.DeleteUserByID(userID)
}
// UpdateUser 更新用户
func (u *UserService) UpdateUser(user *model.User, isChangePwd bool) (err error) {
   if isChangePwd {
      pwdByte, err := GeneratePassword(user.PassWord)
      if err != nil {
         return nil
      }
      user.PassWord = string(pwdByte)
   }
   return u.UserRepository.UpdateUser(user)
}
// FindUserByName 根据用户名称查找用户信息
func (u *UserService) FindUserByName(userName string) (user *model.User, err error) {
   return u.UserRepository.FindUserByName(userName)
}
// FindUserByID 根据用户名称查找用户信息
func (u *UserService) FindUserByID(userId int64) (user *model.User, err error) {
   return u.UserRepository.FindUserByID(userId)
}
// CheckPwd 比对账号密码是否正确
func (u *UserService) CheckPwd(userName string, pwd string) (isOk bool, err error) {
   user, err := u.UserRepository.FindUserByName(userName)
   if err != nil {
      return false, err
   }
   return ValidatePassword(pwd, user.PassWord)
}
// ResetPwd 重置密码
func (u *UserService) ResetPwd(userID int64, pwd string) error {
   return u.UserRepository.ResetPwd(userID,pwd)
}
// GetPermission 获取权限
func (u *UserService) GetPermission(userID int64) (permission int64, err error) {
   return u.UserRepository.GetPermission(userID)
}
// UpdatePermission 修改权限
func (u *UserService) UpdatePermission(userID int64, permission int64) error {
   return u.UserRepository.UpdatePermission(userID,permission)
}
// EnableUser 启用账号
func (u *UserService) EnableUser(userID int64) error {
   return u.UserRepository.EnableUser(userID)
}
// DisableUser 禁用账号
func (u *UserService) DisableUser(userID int64) error {
   return u.UserRepository.DisableUser(userID)
}

最后

至此,go-micro微服务domain层开发工作就正式完成,接下来就开始consul配置、注册中心的代码编写了,更多关于go-micro微服务domain层的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

go-micro微服务domain层开发示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

go-micro微服务domain层开发示例详解

这篇文章主要为大家介绍了go-micro微服务domain层开发示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-10

详解go-micro微服务consul配置及注册中心

这篇文章主要为大家介绍了go-micro微服务consul配置及注册中心示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-10

Go语言微服务开发的步骤与技巧详解

深入解析Go语言微服务开发的步骤与技巧引言随着云计算和容器化技术的发展,微服务架构已经变得越来越流行。而Go语言作为一种高效、简洁、并发安全的编程语言,成为了构建微服务的理想选择。本文将深入解析Go语言微服务开发的步骤与技巧,并提供具体
Go语言微服务开发的步骤与技巧详解
2024-01-23

Go语音开发中常见Error类型处理示例详解

这篇文章主要为大家介绍了Go语音开发中常见Error类型处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

解析Go语言微服务开发的关键步骤,助您快速入门

快速入门Go语言微服务开发的关键步骤解析随着云计算和大数据时代的到来,微服务架构(Microservices Architecture)也成为了一种流行的架构模式。Go语言作为一种效率高、性能强、并发能力突出的编程语言,被广泛应用于微服务
解析Go语言微服务开发的关键步骤,助您快速入门
2024-01-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录