设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间02 现在时间02 缓存数据 曾经在《火星情报局》 汪涵问粉丝们“你们会喜欢薛之谦多久”粉丝们都大喊“一辈子” 当时的薛之谦就笑着说“你们骗人”结果,你们真的骗人。

曾经在《火星情报局》 汪涵问粉丝们“你们会喜欢薛之谦多久”粉丝们都大喊“一辈子” 当时的薛之谦就笑着说“你们骗人”结果,你们真的骗人。 -- 我好像在哪见过你

查看: 3645|回复: 3

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3134
  • 最近打卡:2023-08-27 08:03:57
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
405
主题
373
精华
0
金钱
4319
积分
810
注册时间
2022-12-24
最后登录
2025-5-31

发表于 2023-6-20 12:44:00 | 显示全部楼层 |阅读模式
一 domain层介绍说明


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

二 model层开发


  • 在model目录下新建 user.go 文件
  1. package model
  2. import (
  3.    "time"
  4. )
  5. type User struct {
  6.    //主键
  7.    ID int64 `gorm:"primary_key;not_null;auto_increment" json:"id"`
  8.    UserID int64 `gorm:"unique_index;not_null" json:"user_id"`
  9.    UserName string `gorm:"unique_index;not_null" json:"username"`
  10.    FirstName string `json:"first_name"`
  11.    LastName string `json:"last_name"`
  12.    PassWord string `json:"password"`
  13.    Permission int64 `json:"permission"`
  14.    CreateDate time.Time `json:"create_date"`
  15.    UpdateDate time.Time `json:"update_date"`
  16.    IsActive int64 `json:"is_active"`
  17.    Email string `json:"email"`
  18. }
复制代码
三 repository层开发

在repository层开发目录下新建 user_repository.go 文件
repository层包含功能:

  • InitTable 初始化数据表
  • FindUserByName 根据用户名称查找用户信息
  • FindUserByID 根据用户ID查找用户信息
  • CreateUser 创建用户
  • DeleteUserByID 根据用户ID删除用户
  • UpdateUser 更新用户信息
  • FindAll 查找所有用户
  • ResetPwd 重置密码
  • GetPermission 获取权限
  • UpdatePermission 修改权限
  • EnableUser 启用账号
  • DisableUser 禁用账号
  1. package repository
  2. import (
  3.    "account/domain/model"
  4.    "github.com/jinzhu/gorm"
  5. )
  6. type IUserRepository interface {
  7.    // InitTable 初始化数据表
  8.    InitTable() error
  9.    // FindUserByName 根据用户名称查找用户信息
  10.    FindUserByName(string) (*model.User, error)
  11.    // FindUserByID 根据用户ID查找用户信息
  12.    FindUserByID(int64) (*model.User, error)
  13.    // CreateUser 创建用户
  14.    CreateUser(*model.User) (int64, error)
  15.    // DeleteUserByID 根据用户ID删除用户
  16.    DeleteUserByID(int64) error
  17.    // UpdateUser 更新用户信息
  18.    UpdateUser(*model.User) error
  19.    // FindAll 查找所有用户
  20.    FindAll() ([]model.User, error)
  21.    // ResetPwd 重置密码
  22.    ResetPwd(int64, string) error
  23.    // GetPermission 获取权限
  24.    GetPermission(int64) (int64, error)
  25.    // UpdatePermission 修改权限
  26.    UpdatePermission(int64, int64) error
  27.    // EnableUser 启用账号
  28.    EnableUser(int64) error
  29.    // DisableUser 禁用账号
  30.    DisableUser(int64) error
  31. }
  32. // NewUserRepository 创建UserRepository
  33. func NewUserRepository(db *gorm.DB) IUserRepository {
  34.    return &UserRepository{mysqlDb: db}
  35. }
  36. type UserRepository struct {
  37.    mysqlDb *gorm.DB
  38. }
  39. // InitTable 初始化表
  40. func (u *UserRepository) InitTable() error {
  41.    return u.mysqlDb.CreateTable(&model.User{}).Error
  42. }
  43. // FindUserByName 根据用户名称查找用户信息
  44. func (u *UserRepository) FindUserByName(name string) (user *model.User, err error) {
  45.    user = &model.User{}
  46.    return user, u.mysqlDb.Where("username=?", name).Find(user).Error
  47. }
  48. // FindUserByID 根据用户ID查找用户信息
  49. func (u *UserRepository) FindUserByID(userID int64) (user *model.User, err error) {
  50.    user = &model.User{}
  51.    return user, u.mysqlDb.Where("user_id=?", userID).Find(user).Error
  52. }
  53. // CreateUser 创建用户
  54. func (u *UserRepository) CreateUser(user *model.User) (userID int64, err error) {
  55.    return user.ID, u.mysqlDb.Create(user).Error
  56. }
  57. // DeleteUserByID 删除用户
  58. func (u *UserRepository) DeleteUserByID(userID int64) error {
  59.    return u.mysqlDb.Where("user_id=?", userID).Delete(&model.User{}).Error
  60. }
  61. // UpdateUser 更新用户信息
  62. func (u *UserRepository) UpdateUser(user *model.User) error {
  63.    return u.mysqlDb.Model(user).Update(&user).Error
  64. }
  65. // FindAll 查找所有用户
  66. func (u *UserRepository) FindAll() (userAll []model.User, err error) {
  67.    return userAll, u.mysqlDb.Find(&userAll).Error
  68. }
  69. // ResetPwd 重置密码
  70. func (u *UserRepository) ResetPwd(userID int64, Pwd string) error {
  71.    return u.mysqlDb.Where("user_id=?",userID).Update(model.User{PassWord:Pwd}).Error
  72. }
  73. // GetPermission 获取权限
  74. func (u *UserRepository) GetPermission(userID int64) (Permission int64, err error) {
  75.    var user model.User
  76.    return user.Permission,u.mysqlDb.Where("user_id=?",userID).Find(user).Error
  77. }
  78. // UpdatePermission 修改权限
  79. func (u *UserRepository) UpdatePermission(userID int64, Permission int64) error {
  80.    return u.mysqlDb.Where("user_id=?",userID).Update(model.User{Permission:Permission}).Error
  81. }
  82. // EnableUser 启用账号
  83. func (u *UserRepository) EnableUser(userID int64) error {
  84.    return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 1}).Error
  85. }
  86. // DisableUser 禁用账号
  87. func (u *UserRepository) DisableUser(userID int64) error {
  88.    return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 0}).Error
  89. }
复制代码
四 service层开发

在service目录下新建 user_service.go 文件
service层包含功能:

  • AddUser 插入用户
  • DeleteUser 删除用户
  • UpdateUser 更新用户
  • FindUserByName 根据用户名称查找用户信息
  • FindUserByID 根据用户ID查找用户信息
  • CheckPwd 比对账号密码是否正确
  • ResetPwd 重置密码
  • GetPermission 获取权限
  • UpdatePermission 修改权限
  • EnableUser 启用账号
  • DisableUser 禁用账号
  1. package service
  2. import (
  3.    "account/domain/model"
  4.    "account/domain/repository"
  5.    "errors"
  6.    "golang.org/x/crypto/bcrypt"
  7. )
  8. type IUserService interface {
  9.    // AddUser 插入用户
  10.    AddUser(user *model.User) (int64, error)
  11.    // DeleteUser 删除用户
  12.    DeleteUser(int64) error
  13.    // UpdateUser 更新用户
  14.    UpdateUser(user *model.User, isChangePwd bool) (err error)
  15.    // FindUserByName 根据用户名称查找用户信息
  16.    FindUserByName(string) (*model.User, error)
  17.    // FindUserByID 根据用户ID查找用户信息
  18.    FindUserByID(int64) (*model.User, error)
  19.    // CheckPwd 比对账号密码是否正确
  20.    CheckPwd(userName string, pwd string) (isOk bool, err error)
  21.    // ResetPwd 重置密码
  22.    ResetPwd(int64, string) error
  23.    // GetPermission 获取权限
  24.    GetPermission(int64) (int64, error)
  25.    // UpdatePermission 修改权限
  26.    UpdatePermission(int64, int64) error
  27.    // EnableUser 启用账号
  28.    EnableUser(int64) error
  29.    // DisableUser 禁用账号
  30.    DisableUser(int64) error
  31. }
  32. // NewUserService 创建实例
  33. func NewUserService(userRepository repository.IUserRepository) IUserService {
  34.    return &UserService{UserRepository: userRepository}
  35. }
  36. type UserService struct {
  37.    UserRepository repository.IUserRepository
  38. }
  39. // GeneratePassword 加密用户密码
  40. func GeneratePassword(userPassword string) ([]byte, error) {
  41.    return bcrypt.GenerateFromPassword([]byte(userPassword), bcrypt.DefaultCost)
  42. }
  43. // ValidatePassword 验证用户密码
  44. func ValidatePassword(userPassword string, hashed string) (isOk bool, err error) {
  45.    if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
  46.       return false, errors.New("密码比对错误")
  47.    }
  48.    return true, nil
  49. }
  50. // AddUser 插入用户
  51. func (u *UserService) AddUser(user *model.User) (userID int64, err error) {
  52.    pwdByte, err := GeneratePassword(user.PassWord)
  53.    if err != nil {
  54.       return user.ID, err
  55.    }
  56.    user.PassWord = string(pwdByte)
  57.    return u.UserRepository.CreateUser(user)
  58. }
  59. // DeleteUser 删除用户
  60. func (u *UserService) DeleteUser(userID int64) error {
  61.    return u.UserRepository.DeleteUserByID(userID)
  62. }
  63. // UpdateUser 更新用户
  64. func (u *UserService) UpdateUser(user *model.User, isChangePwd bool) (err error) {
  65.    if isChangePwd {
  66.       pwdByte, err := GeneratePassword(user.PassWord)
  67.       if err != nil {
  68.          return nil
  69.       }
  70.       user.PassWord = string(pwdByte)
  71.    }
  72.    return u.UserRepository.UpdateUser(user)
  73. }
  74. // FindUserByName 根据用户名称查找用户信息
  75. func (u *UserService) FindUserByName(userName string) (user *model.User, err error) {
  76.    return u.UserRepository.FindUserByName(userName)
  77. }
  78. // FindUserByID 根据用户名称查找用户信息
  79. func (u *UserService) FindUserByID(userId int64) (user *model.User, err error) {
  80.    return u.UserRepository.FindUserByID(userId)
  81. }
  82. // CheckPwd 比对账号密码是否正确
  83. func (u *UserService) CheckPwd(userName string, pwd string) (isOk bool, err error) {
  84.    user, err := u.UserRepository.FindUserByName(userName)
  85.    if err != nil {
  86.       return false, err
  87.    }
  88.    return ValidatePassword(pwd, user.PassWord)
  89. }
  90. // ResetPwd 重置密码
  91. func (u *UserService) ResetPwd(userID int64, pwd string) error {
  92.    return u.UserRepository.ResetPwd(userID,pwd)
  93. }
  94. // GetPermission 获取权限
  95. func (u *UserService) GetPermission(userID int64) (permission int64, err error) {
  96.    return u.UserRepository.GetPermission(userID)
  97. }
  98. // UpdatePermission 修改权限
  99. func (u *UserService) UpdatePermission(userID int64, permission int64) error {
  100.    return u.UserRepository.UpdatePermission(userID,permission)
  101. }
  102. // EnableUser 启用账号
  103. func (u *UserService) EnableUser(userID int64) error {
  104.    return u.UserRepository.EnableUser(userID)
  105. }
  106. // DisableUser 禁用账号
  107. func (u *UserService) DisableUser(userID int64) error {
  108.    return u.UserRepository.DisableUser(userID)
  109. }
复制代码
最后

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-27
最后登录
2022-12-27

发表于 2024-10-26 21:50:47 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-27
最后登录
2022-12-27

发表于 2025-1-9 21:38:44 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2022-12-25
最后登录
2022-12-25

发表于 2025-4-8 11:37:04 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表