最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go-micro微服務(wù)domain層開發(fā)示例詳解

 更新時(shí)間:2023年01月10日 09:58:27   作者:夏沫的夢(mèng)  
這篇文章主要為大家介紹了go-micro微服務(wù)domain層開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一 domain層介紹說明

  • domain層專注于數(shù)據(jù)庫數(shù)據(jù)領(lǐng)域開發(fā),我們把數(shù)據(jù)庫相關(guān)操作全部寫在domain層。
  • model層:數(shù)據(jù)表字段定義與開發(fā)
  • repository層:數(shù)據(jù)庫數(shù)據(jù)CURD操作
  • service層:數(shù)據(jù)庫相關(guān)業(yè)務(wù)操作
  • 對(duì)于復(fù)雜的業(yè)務(wù)操作,這樣可以使業(yè)務(wù)邏輯更加清晰,有利于后期開發(fā)與維護(hù)。

二 model層開發(fā)

  • 在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層開發(fā)

在repository層開發(fā)目錄下新建 user_repository.go 文件

repository層包含功能:

  • InitTable 初始化數(shù)據(jù)表
  • FindUserByName 根據(jù)用戶名稱查找用戶信息
  • FindUserByID 根據(jù)用戶ID查找用戶信息
  • CreateUser 創(chuàng)建用戶
  • DeleteUserByID 根據(jù)用戶ID刪除用戶
  • UpdateUser 更新用戶信息
  • FindAll 查找所有用戶
  • ResetPwd 重置密碼
  • GetPermission 獲取權(quán)限
  • UpdatePermission 修改權(quán)限
  • EnableUser 啟用賬號(hào)
  • DisableUser 禁用賬號(hào)
package repository
import (
   "account/domain/model"
   "github.com/jinzhu/gorm"
)
type IUserRepository interface {
   // InitTable 初始化數(shù)據(jù)表
   InitTable() error
   // FindUserByName 根據(jù)用戶名稱查找用戶信息
   FindUserByName(string) (*model.User, error)
   // FindUserByID 根據(jù)用戶ID查找用戶信息
   FindUserByID(int64) (*model.User, error)
   // CreateUser 創(chuàng)建用戶
   CreateUser(*model.User) (int64, error)
   // DeleteUserByID 根據(jù)用戶ID刪除用戶
   DeleteUserByID(int64) error
   // UpdateUser 更新用戶信息
   UpdateUser(*model.User) error
   // FindAll 查找所有用戶
   FindAll() ([]model.User, error)
   // ResetPwd 重置密碼
   ResetPwd(int64, string) error
   // GetPermission 獲取權(quán)限
   GetPermission(int64) (int64, error)
   // UpdatePermission 修改權(quán)限
   UpdatePermission(int64, int64) error
   // EnableUser 啟用賬號(hào)
   EnableUser(int64) error
   // DisableUser 禁用賬號(hào)
   DisableUser(int64) error
}
// NewUserRepository 創(chuàng)建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 根據(jù)用戶名稱查找用戶信息
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 根據(jù)用戶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 創(chuàng)建用戶
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 獲取權(quán)限
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 修改權(quán)限
func (u *UserRepository) UpdatePermission(userID int64, Permission int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(model.User{Permission:Permission}).Error
}
// EnableUser 啟用賬號(hào)
func (u *UserRepository) EnableUser(userID int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 1}).Error
}
// DisableUser 禁用賬號(hào)
func (u *UserRepository) DisableUser(userID int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 0}).Error
}

四 service層開發(fā)

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

service層包含功能:

  • AddUser 插入用戶
  • DeleteUser 刪除用戶
  • UpdateUser 更新用戶
  • FindUserByName 根據(jù)用戶名稱查找用戶信息
  • FindUserByID 根據(jù)用戶ID查找用戶信息
  • CheckPwd 比對(duì)賬號(hào)密碼是否正確
  • ResetPwd 重置密碼
  • GetPermission 獲取權(quán)限
  • UpdatePermission 修改權(quán)限
  • EnableUser 啟用賬號(hào)
  • DisableUser 禁用賬號(hào)
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 根據(jù)用戶名稱查找用戶信息
   FindUserByName(string) (*model.User, error)
   // FindUserByID 根據(jù)用戶ID查找用戶信息
   FindUserByID(int64) (*model.User, error)
   // CheckPwd 比對(duì)賬號(hào)密碼是否正確
   CheckPwd(userName string, pwd string) (isOk bool, err error)
   // ResetPwd 重置密碼
   ResetPwd(int64, string) error
   // GetPermission 獲取權(quán)限
   GetPermission(int64) (int64, error)
   // UpdatePermission 修改權(quán)限
   UpdatePermission(int64, int64) error
   // EnableUser 啟用賬號(hào)
   EnableUser(int64) error
   // DisableUser 禁用賬號(hào)
   DisableUser(int64) error
}
// NewUserService 創(chuàng)建實(shí)例
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 驗(yàn)證用戶密碼
func ValidatePassword(userPassword string, hashed string) (isOk bool, err error) {
   if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
      return false, errors.New("密碼比對(duì)錯(cuò)誤")
   }
   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 根據(jù)用戶名稱查找用戶信息
func (u *UserService) FindUserByName(userName string) (user *model.User, err error) {
   return u.UserRepository.FindUserByName(userName)
}
// FindUserByID 根據(jù)用戶名稱查找用戶信息
func (u *UserService) FindUserByID(userId int64) (user *model.User, err error) {
   return u.UserRepository.FindUserByID(userId)
}
// CheckPwd 比對(duì)賬號(hào)密碼是否正確
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 獲取權(quán)限
func (u *UserService) GetPermission(userID int64) (permission int64, err error) {
   return u.UserRepository.GetPermission(userID)
}
// UpdatePermission 修改權(quán)限
func (u *UserService) UpdatePermission(userID int64, permission int64) error {
   return u.UserRepository.UpdatePermission(userID,permission)
}
// EnableUser 啟用賬號(hào)
func (u *UserService) EnableUser(userID int64) error {
   return u.UserRepository.EnableUser(userID)
}
// DisableUser 禁用賬號(hào)
func (u *UserService) DisableUser(userID int64) error {
   return u.UserRepository.DisableUser(userID)
}

最后

至此,go-micro微服務(wù)domain層開發(fā)工作就正式完成,接下來就開始consul配置、注冊(cè)中心的代碼編寫了,更多關(guān)于go-micro微服務(wù)domain層的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文掌握Go語言并發(fā)編程必備的Mutex互斥鎖

    一文掌握Go語言并發(fā)編程必備的Mutex互斥鎖

    Go 語言提供了 sync 包,其中包括 Mutex 互斥鎖、RWMutex 讀寫鎖等同步機(jī)制,本篇博客將著重介紹 Mutex 互斥鎖的基本原理,需要的可以參考一下
    2023-04-04
  • GO語言函數(shù)(func)的聲明與使用詳解

    GO語言函數(shù)(func)的聲明與使用詳解

    這篇文章主要介紹了GO函數(shù)(func)的聲明與使用,包括了GO語言函數(shù)聲明與使用,GO語言遞歸函數(shù),GO語言內(nèi)置函數(shù),GO語言函數(shù)defer應(yīng)用,GO語言函數(shù)可變長度參數(shù)需要的朋友可以參考下
    2022-12-12
  • golang操作mongodb的方法

    golang操作mongodb的方法

    這篇文章主要介紹了golang操作mongodb的方法,涉及Go語言操作mongodb的連接、讀取及顯示的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • go?micro微服務(wù)框架項(xiàng)目搭建方法

    go?micro微服務(wù)框架項(xiàng)目搭建方法

    這篇文章主要為大家介紹了go?micro微服務(wù)框架項(xiàng)目搭建方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • golang中三種線程安全的MAP小結(jié)

    golang中三種線程安全的MAP小結(jié)

    在Go語言中,Map是并發(fā)不安全的,本文主要介紹了golang中三種線程安全的MAP小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 詳解Golang官方中的一致性哈希組件

    詳解Golang官方中的一致性哈希組件

    這篇文章主要為大家詳細(xì)介紹了Golang官方中的一致性哈希組件的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • 一文帶你熟悉Go語言中的for循環(huán)

    一文帶你熟悉Go語言中的for循環(huán)

    這篇文章主要和大家分享一下Go語言中for循環(huán)的定義與使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • go-micro集成RabbitMQ實(shí)戰(zhàn)和原理詳解

    go-micro集成RabbitMQ實(shí)戰(zhàn)和原理詳解

    本文主要介紹go-micro使用RabbitMQ收發(fā)數(shù)據(jù)的方法和原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Golang中Interface接口的三個(gè)特性

    Golang中Interface接口的三個(gè)特性

    本文詳細(xì)講解了Golang中Interface接口的三個(gè)特性,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Golang安全讀寫共享變量的方式詳解

    Golang安全讀寫共享變量的方式詳解

    互斥鎖(Mutex)是一種常用的同步原語,用于防止多個(gè)協(xié)程同時(shí)訪問共享資源,這篇文章主要介紹了Golang安全讀寫共享變量的方式,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

武定县| 肇源县| 开封县| 永嘉县| 资阳市| 嘉荫县| 佛学| 阳高县| 霍林郭勒市| 靖远县| 石景山区| 呼伦贝尔市| 龙川县| 盐源县| 丹江口市| 宁乡县| 金坛市| 乌海市| 曲阳县| 杭锦后旗| 海伦市| 台东县| 蒙自县| 天等县| 郸城县| 昌图县| 廉江市| 建阳市| 曲周县| 博白县| 泗阳县| 内丘县| 芜湖市| 甘泉县| 杭州市| 汉川市| 敖汉旗| 如东县| 罗山县| 田林县| 师宗县|