精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 語言微服務框架 Kratos 開發 HTTP API

開發 前端
本文我們介紹使用 kratos 微服務框架,怎么創建 HTTP API,介紹了怎么通過 kratos 腳手架創建項目和生成 proto 文件。Kratos 微服務框架使用 DDD 和 DI 的代碼架構,我們介紹 kratos 模板生成的代碼目錄的作用。

1.介紹

Kratos 一套輕量級 Go 微服務框架,包含大量微服務相關框架及工具。

本文我們分為開發環境,創建項目,代碼目錄,HTTP API,四個部分介紹 Kratos 微服務框架。

2.開發環境

使用 Kratos 微服務框架,我們需要準備 Go 開發環境,我們選擇使用 Go 當前最新版本 go v1.23。

因為 Kratos 微服務框架通過 Protobuf IDL 定義 API,所以我們需要安裝工具 protoc,以及相關插件,比如 protoc-gen-go 等。

因為 Kratos 微服務框架使用依賴注入,所以我們需要安裝依賴工具 wire。

此外,Kratos 微服務框架提供了腳手架工具 kratos。

3.創建項目

我們可以使用 Kartos 微服務框架的腳手架工具 kratos 創建項目。

示例代碼:

kratos new user-center -r https://gitee.com/go-kratos/kratos-layout.git

閱讀上面這段代碼,我們可以發現使用 kratos 的 new 命令創建項目名稱為 user-center 的項目,使用 -r 指定模板源。

此外,也可以使用環境變量指定模板源,例如:KRATOS_LAYOUT_REPO=https://gitee.com/go-kratos/kratos-layout.git。

4.代碼目錄

在使用 kratos 創建項目之后,我們再介紹一下項目的代碼目錄。

示例代碼:

.
└── user-center
    ├── api
    │   ├── helloworld
    ├── cmd
    │   └── user-center
    ├── configs
    │   └── config.yaml
    ├── Dockerfile
    ├── go.mod
    ├── go.sum
    ├── internal
    │   ├── biz
    │   ├── conf
    │   ├── data
    │   ├── server
    │   └── service
    ├── LICENSE
    ├── Makefile
    ├── openapi.yaml
    ├── README.md
    └── third_party
        ├── errors
        ├── google
        ├── openapi
        ├── README.md
        └── validate

閱讀上面的代碼目錄,我們分別介紹每個目錄的作用,api 目錄中是 proto 文件以及 protoc 生成的 go 文件;cmd 目錄中是項目入口文件 main.go 和 wire 工具的文件 wire.go 以及 wire 生成的 go 文件;configs 目錄中是配置文件;

internal 目錄中是業務邏輯代碼,其中 biz 目錄中是 DDD 的 domain 和 usecase,data 目錄中是 DDD 的 repository,service 目錄中是 DDD 的 delivery;

conf 目錄中是使用 proto 格式的配置文件,server 目錄中是 http 和 grpc 的實例。

5.HTTP API

創建 proto 文件

Kratos 微服務框架開發 HTTP API 和 RPC API 都是通過定義 proto。

我們可以使用 kratos 腳手架工具生成 proto 模板文件,然后按照自己的需求修改。

示例代碼:

kratos proto add api/user/v1/user.proto

也可以手動創建 proto 文件,并且編寫相關代碼。

示例代碼:

syntax = "proto3";

package user.v1;

import "google/api/annotations.proto";

option go_package = "user-center/api/user/v1;v1";

service User {
    rpc Login (LoginReq) returns (LoginRes) {
        option (google.api.http) = {
            post: "/login",
            body: "*",
        }
    }
}

message LoginReq {
    string email = 1;
    string password = 2;
}

message LoginRes {
    string name = 1;
}

在創建 proto 文件之后,我們生成 go 文件,可以直接使用 protoc 工具,也可以使用 kratos 腳手架,本文我們使用 kratos 腳手架。

生成 client 源碼

示例代碼:

kratos proto client api/user/v1/user.proto

生成 server 源碼

示例代碼:

kratos proto server api/user/v1/user.proto -t internal/service

接入 XORM

修改 internal/data/data.go 文件。

示例代碼:

// Data .
type Data struct {
 // TODO wrapped database client
 dbEngine *xorm.Engine
}

// NewData .
func NewData(c *conf.Data, logger log.Logger, dbEngine *xorm.Engine) (*Data, func(), error) {
 cleanup := func() {
  log.NewHelper(logger).Info("closing the data resources")
 }
 return &Data{
  dbEngine: dbEngine,
 }, cleanup, nil
}

// NewDbEngine .
func NewDbEngine(c *conf.Data) (dbEngine *xorm.Engine, err error) {
 dbEngine, err = xorm.NewEngine(c.Database.Driver, c.Database.Source)
 return
}

修改配置文件

修改 configs/config.yaml 文件。

示例代碼:

data:
  database:
    driver: mysql
    source: frank:123456@tcp(192.168.110.156:3306)/user?parseTime=True&loc=Local

domain 層和 usecase 層

在 internal/biz/user.go 文件中,編寫 domain 層和 usecase 層代碼。

示例代碼:

package biz

import (
 "context"
 pb "user-center/api/user/v1"
)

type User struct {
 Email    string
 Password string
}

type UserRepo interface {
 Create(ctx context.Context, loginReq *pb.LoginReq) (int64, error)
}

type UserUsecase struct {
 ur UserRepo
}

func NewUserUsecase(ur UserRepo) *UserUsecase {
 return &UserUsecase{
  ur: ur,
 }
}

func (u *UserUsecase) Register(ctx context.Context, loginReq *pb.LoginReq) (id int64, err error) {
 id, err = u.ur.Create(ctx, loginReq)
 return
}

repository 層

在 internal/data/user.go 文件中,編寫 reporitory 層代碼。

示例代碼:

package data

import (
 "context"
 "fmt"
 pb "user-center/api/user/v1"
 "user-center/internal/biz"
)

type userRepo struct {
 data *Data
}

func NewUserRepo(data *Data) biz.UserRepo {
 return &userRepo{
  data: data,
 }
}

func (u *userRepo) Create(ctx context.Context, loginReq *pb.LoginReq) (id int64, err error) {
 fmt.Println(loginReq)
 id, err = u.data.dbEngine.InsertOne(loginReq)
 return
}

delivery 層

在 internal/service/user.go 文件中,編寫 delivery 層代碼。

示例代碼:

package service

import (
 "context"
 "user-center/internal/biz"

 pb "user-center/api/user/v1"
)

// UserService is a user service.
type UserService struct {
 pb.UnimplementedUserServer
 uc *biz.UserUsecase
}

// NewUserService new a user service.
func NewUserService(uc *biz.UserUsecase) *UserService {
 return &UserService{
  uc: uc,
 }
}

// Login implements user.UserService.
func (u *UserService) Login(ctx context.Context, req *pb.LoginReq) (res *pb.LoginRes, err error) {
 _, err = u.uc.Register(ctx, req)
 return
}

注冊 HTTP API

在生成 server 源碼之后,我們需要注冊 HTTP API。

在 internal/server/http.go 文件中,修改代碼,導入 v1 blog/api/user/v1 ,在 NewHTTPServer 函數的參數列表中添加 user *service.UserService ,在函數體中添加 v1.RegisterUserHTTPServer(srv, user) 。

wire 生成

接下來,我們需要修改 wire 的 provider。

在 internal/service/service.go 文件中,新增 NewUserService。

示例代碼:

var ProviderSet = wire.NewSet(NewGreeterService, NewUserService)

在 internal/biz/biz.go 文件中,新增 NewUserUsecase。

示例代碼:

var ProviderSet = wire.NewSet(NewGreeterUsecase, NewUserUsecase)

在 internal/data/data.go 文件中,新增 NewUserRepo。

示例代碼:

var ProviderSet = wire.NewSet(NewData, NewDbEngine, NewGreeterRepo, NewUserRepo)

執行 wire 生成命令:

示例代碼:

cd cmd/user-center
wire

查看 wire_gen.go 文件。

示例代碼:

// wireApp init kratos application.
func wireApp(confServer *conf.Server, confData *conf.Data, logger log.Logger) (*kratos.App, func(), error) {
 engine, err := data.NewDbEngine(confData)
 if err != nil {
  return nil, nil, err
 }
 dataData, cleanup, err := data.NewData(confData, logger, engine)
 if err != nil {
  return nil, nil, err
 }
 greeterRepo := data.NewGreeterRepo(dataData, logger)
 greeterUsecase := biz.NewGreeterUsecase(greeterRepo, logger)
 greeterService := service.NewGreeterService(greeterUsecase)
 grpcServer := server.NewGRPCServer(confServer, greeterService, logger)
 userRepo := data.NewUserRepo(dataData)
 userUsecase := biz.NewUserUsecase(userRepo)
 userService := service.NewUserService(userUsecase)
 httpServer := server.NewHTTPServer(confServer, userService, logger)
 app := newApp(logger, grpcServer, httpServer)
 return app, func() {
  cleanup()
 }, nil
}

閱讀上面代碼,我們可以發現 wire 工具已經生成依賴注入代碼。

運行代碼

示例代碼:

kratos run

6.總結

本文我們介紹使用 kratos 微服務框架,怎么創建 HTTP API,介紹了怎么通過 kratos 腳手架創建項目和生成 proto 文件。

Kratos 微服務框架使用 DDD 和 DI 的代碼架構,我們介紹 kratos 模板生成的代碼目錄的作用。

關于 proto 和 wire 工具,以及 DDD 和 DI 的詳細介紹,我們在之前的文章中都介紹過,讀者朋友們可以按需翻閱。

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2025-08-04 01:22:00

Go 語言微服務Kratos

2025-01-20 00:10:00

Go語言Kratos

2025-01-13 00:00:07

Go語言微服務

2024-12-30 00:38:23

Go語言微服務

2025-10-20 07:17:10

Go語言微服務

2025-01-06 00:00:01

KratosGo微服務

2024-11-07 11:46:41

2018-12-11 10:43:09

Go語言 HTTP服務器

2021-07-26 11:19:43

微服務開發技術

2023-12-13 07:19:01

微服務架構Golang

2021-09-06 11:34:47

架構微服務Hystrix

2021-03-05 11:09:46

Go框架微服務

2020-11-03 09:00:00

API微服務JavaScript框

2018-01-22 11:50:30

華為云

2017-04-10 20:21:39

Go語言源碼分析Handler

2017-04-10 13:26:06

Go語言源碼

2021-01-14 09:55:21

Java微服務Go

2018-12-13 09:00:23

GoogleGo微服務

2025-05-26 04:00:00

2022-06-08 08:52:04

Tars微服務開發C++開發
點贊
收藏

51CTO技術棧公眾號

久久久久久爱| 黄色动漫在线| 久久婷婷久久| 日韩视频欧美视频| 女同性αv亚洲女同志| 91黄页在线观看| 国产视频在线观看一区二区三区 | 午夜啪啪免费视频| 亚洲av无码乱码国产麻豆| 国产日韩欧美高清免费| 在线观看日韩av| 中文写幕一区二区三区免费观成熟| 国产传媒在线| 最新成人av在线| 精品伦精品一区二区三区视频| 中文永久免费观看| 影音先锋亚洲电影| 曰本色欧美视频在线| 久久久久国产免费| 日韩不卡视频在线观看| 一区二区激情视频| 日韩视频专区| 欧美特黄一级视频| 久久精品国产亚洲aⅴ| 91国内精品久久| 麻豆精品一区二区三区视频| 国产伦精品一区二区三区千人斩| 日韩三级免费观看| 久久国产激情视频| 在线看片福利| 亚洲国产精品天堂| 一区二区三区久久网| 深夜福利视频在线免费观看| 国产综合色视频| 国产精品高潮呻吟视频| 日本亚洲欧美在线| 雨宫琴音一区二区三区| 一本色道久久88综合亚洲精品ⅰ| 精品视频站长推荐| 日韩视频一区二区三区四区| 欧美日韩国产精选| 黄色国产小视频| 在线天堂资源www在线污| 亚洲综合久久久久| 五月天色婷婷综合| 91精品国产91久久久久游泳池| 久久综合999| 久久国产精品一区二区三区四区| 亚洲女人18毛片水真多| 国产精品一区二区在线观看不卡| 国产精品直播网红| 国产一卡二卡三卡| 久久蜜桃精品| 欧日韩不卡在线视频| 国产香蕉视频在线| 亚洲精品美女91| 国外成人性视频| 日韩成人在线免费视频| 黄色亚洲在线| 欧美夫妻性视频| 欧美日韩亚洲国产另类| 欧美 日韩 国产一区二区在线视频 | 日本激情一区二区| 国产91高潮流白浆在线麻豆| 成人黄色在线免费观看| 日本毛片在线观看| 99国产一区二区三精品乱码| 久久波多野结衣| 日产精品久久久久久久性色| 国产午夜精品美女毛片视频| 日本日本精品二区免费| 91啦中文在线| 一区二区三区四区在线播放| 亚洲精品久久久久久久蜜桃臀| 丰满大乳少妇在线观看网站| 婷婷综合在线观看| 97在线免费公开视频| 日本另类视频| 欧美一区二区在线看| 久久久久久久久久影视| 亚洲精品一级二级三级| 在线精品播放av| 国产a免费视频| 9久re热视频在线精品| 国产精品成人在线| 一级黄色片视频| 国产成人h网站| 久久国产精品免费一区| 在线国产91| 亚洲在线免费播放| 欧美日韩中文在线视频| 久久亚洲精品中文字幕| 日韩女同互慰一区二区| 一本色道综合久久欧美日韩精品| 欧洲杯足球赛直播| 伦理中文字幕亚洲| 色婷婷在线观看视频| 美日韩一区二区| 国产嫩草一区二区三区在线观看| 国产一区精品| 一区二区成人在线视频 | 美女视频网站久久| 不卡一区二区三区四区五区| 黄色在线小视频| 亚洲一区成人在线| 亚洲综合日韩欧美| 精品网站aaa| 最近2019免费中文字幕视频三| 久久久久香蕉视频| 免费精品99久久国产综合精品| 成人免费视频网站入口| 在线免费av电影| 精品久久久久久久久中文字幕| 小泽玛利亚视频在线观看| 欧美人成在线观看ccc36| 久久久精品一区二区三区| 日韩不卡在线播放| 国产盗摄一区二区三区| 婷婷久久五月天| 九色porny自拍视频在线观看| 欧美高清www午色夜在线视频| 野花社区视频在线观看| 在线成人www免费观看视频| 成人黄色免费看| 精品成人一区二区三区免费视频| 亚洲二区在线观看| 日韩精品在线播放视频| 俺要去色综合狠狠| 17婷婷久久www| 亚洲国产综合一区| 亚洲人成精品久久久久| 日本久久久久久久久久久久| 色婷婷精品视频| 欧美肥臀大乳一区二区免费视频| 国产一区二区麻豆| 日本一区二区高清| 男女午夜激情视频| 中文字幕伦av一区二区邻居| 久久理论片午夜琪琪电影网| 国产99久一区二区三区a片| 中文字幕一区二区日韩精品绯色| 九九视频精品在线观看| 亚欧日韩另类中文欧美| 午夜精品蜜臀一区二区三区免费| 国产黄a三级三级三级| 亚洲女子a中天字幕| 爱爱爱爱免费视频| 五月精品视频| 成人免费观看网址| 77导航福利在线| 欧美色图12p| 日本女人性生活视频| 日本少妇一区二区| 日韩妆和欧美的一区二区| 成人爱爱网址| 国产亚洲精品美女久久久久 | 欧美一卡2卡3卡4卡| 久久国产高清视频| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美视频在线观看| 污网站在线免费| 亚洲国产精品日韩专区av有中文| 成人免费自拍视频| 丝袜美腿av在线| 精品国产伦一区二区三区观看体验| 久草视频手机在线观看| 97精品电影院| 精品久久久久av| 久久激情电影| 国产日韩欧美91| 在线免费av导航| 亚洲第一页在线| 在线观看日韩中文字幕| 国产蜜臀av在线一区二区三区| 三级视频中文字幕| 久久久久av| 国产精品国产一区二区| 黑人巨大亚洲一区二区久 | 黑人操日本美女| 国产精品亚洲а∨天堂免在线| 屁屁影院ccyy国产第一页| 国产成人精品亚洲线观看| 亚州国产精品久久久| 高h视频在线| 日韩欧美视频在线| 影音先锋在线国产| 一区在线中文字幕| 在线xxxxx| 日韩国产欧美在线播放| 欧美一级特黄aaaaaa在线看片| 农村少妇一区二区三区四区五区 | www.成人在线| 超碰在线公开97| 狠狠爱成人网| 午夜精品视频在线观看一区二区| 涩爱av色老久久精品偷偷鲁 | 日韩中文字幕不卡视频| 精品国产va久久久久久久| 精品久久久久久中文字幕一区奶水| 亚洲欧美va天堂人熟伦| 国产99久久久久久免费看农村| 日本福利视频在线| 99热国内精品| 久久久精品动漫| 欧美精品三级在线| 日韩美女视频免费在线观看| 在线xxxx| 中文字幕少妇一区二区三区| 色综合久久久久久| 在线播放视频一区| 一级片视频在线观看| 亚洲猫色日本管| 调教驯服丰满美艳麻麻在线视频| 成人小视频在线| 亚洲精品国产久| 日韩中文字幕不卡| 大西瓜av在线| 欧美aa国产视频| 亚洲精品一区二区毛豆| 亚洲+变态+欧美+另类+精品| www.久久久| 国产精品久久久久久久久久辛辛| 国产精品久久久久久久久免费看 | 在线欧美亚洲| 六月婷婷激情网| 日韩精品水蜜桃| 欧美一级爽aaaaa大片| 国产精品天天看天天狠| 不卡视频一区二区三区| 日韩中文在线| 91亚洲人电影| 99久久久成人国产精品| 91精品久久久久久久| 123成人网| 国产精品都在这里| 性欧美超级视频| 欧美在线激情网| 亚洲少妇视频| 欧美专区日韩视频| 是的av在线| 欧美亚洲视频在线看网址| 91jq激情在线观看| 欧美激情精品久久久久| 特级毛片在线| 欧美黄色片免费观看| 免费男女羞羞的视频网站在线观看| 日韩一区视频在线| 午夜伦全在线观看| 中文字幕少妇一区二区三区| 久蕉在线视频| 亚洲人成电影网站色xx| 日本亚洲一区| 亚洲午夜av久久乱码| 国产精品一二三区视频| 中文字幕亚洲无线码在线一区| 1024国产在线| www.精品av.com| 中文字幕资源网在线观看| 欧美成人精品在线播放| 日本高清在线观看视频| 久久久亚洲精选| 亚洲十八**毛片| 国产成人综合亚洲| 狂野欧美性猛交xxxx| 91视频免费网站| 中文在线综合| 国产视频一区二区三区四区| 亚洲美女15p| 亚洲成人18| 午夜日本精品| 免费看一级大黄情大片| 日韩在线播放一区二区| 日韩在线一区视频| 国产成人免费av在线| 水蜜桃av无码| 国产精品美女久久久久久久久久久 | 亚州成人av在线| 欧美精品高清| 91久久久久久久一区二区| 成人资源在线| 色女人综合av| 欧美午夜在线视频| 日本www高清视频| 韩国三级在线一区| 岛国av免费观看| 久久精品欧美一区二区三区麻豆| 任你操精品视频| 亚洲国产中文字幕在线视频综合 | 精品国产国产综合精品| 亚洲国产美国国产综合一区二区| 亚洲自拍一区在线观看| 91麻豆精品国产无毒不卡在线观看| 日本激情一区二区| 中文字幕在线看视频国产欧美| 日本一本在线免费福利| 国产精品扒开腿爽爽爽视频| 亚洲国产高清在线观看| 蜜桃在线一区二区三区精品| 综合天堂av久久久久久久| 欧美成人xxxxx| 国产在线精品一区二区夜色| 中文字幕狠狠干| 亚洲精品视频在线| 日本a级c片免费看三区| 欧美一级高清大全免费观看| 精品久久av| 久久久综合免费视频| 中文字幕成人| 日韩精品大片| 日韩一区二区免费看| 在线播放免费视频| 久久久久久免费网| 国产 日韩 欧美 成人| 欧美日本在线看| 美女欧美视频在线观看免费 | www.男人天堂网| 免费成人性网站| 亚洲自拍偷拍一区二区| 亚洲人成小说网站色在线| 国产日韩久久久| 精品亚洲一区二区三区在线播放| 男女在线视频| 亚洲a区在线视频| 成人羞羞视频在线看网址| 亚洲国产精品久久久久爰色欲| 成人在线视频首页| 九九九免费视频| 欧美精品一二三区| 成年在线观看免费人视频| 国产91精品视频在线观看| 哺乳挤奶一区二区三区免费看| 国产又爽又黄ai换脸| 蜜桃91丨九色丨蝌蚪91桃色| 女~淫辱の触手3d动漫| 黄色一区二区在线| 成 人 黄 色 片 在线播放| www日韩欧美| 四虎国产精品免费久久| 亚洲欧美久久234| 免费在线视频一区| 亚洲永久无码7777kkk| 午夜精品福利一区二区三区蜜桃| 亚洲国产综合网| 国模精品视频一区二区三区| 中文字幕日韩在线| 精品国产av无码一区二区三区| 国产成人丝袜美腿| 亚洲av鲁丝一区二区三区| 日韩视频免费观看高清完整版在线观看| 国产一二区在线观看| 91久久精品视频| 欧美伊人影院| 日韩成人av影院| 亚洲成人tv网| 亚欧在线观看视频| 日本电影亚洲天堂| 精品欧美久久| 日本不卡一区在线| 亚洲精品一二三| www.久久精品.com| 国内精品久久久久久| 牲欧美videos精品| 人妻少妇被粗大爽9797pw| 国产日韩影视精品| 一区二区三区精| 欧美成人精品影院| 欧美黄色录像| 三级在线免费看| 亚洲欧美另类综合偷拍| 亚洲国产精品久久久久久久 | 日韩欧美三级视频| 亚洲色图日韩av| 亚洲视频自拍| www.日本少妇| 欧美激情在线看| 国产手机精品视频| 久久久人成影片一区二区三区| 午夜先锋成人动漫在线| 国产视频手机在线播放| 亚洲女人****多毛耸耸8| 少妇又色又爽又黄的视频| 日韩av免费一区| 亚洲精品国产首次亮相| 国产日韩视频一区| 91搞黄在线观看| 国产精品剧情| 免费国产在线精品一区二区三区| 欧美aaa在线| 国产一级久久久| 亚洲无限av看| 91精品丝袜国产高跟在线| 日韩中文字幕组| 一区二区三区鲁丝不卡| 精品欧美不卡一区二区在线观看| 亚洲va欧美va国产综合剧情 | 亚洲国产wwwccc36天堂| 国模吧精品人体gogo| 超碰97在线人人| 日本视频在线一区| 日韩精品一区二区不卡|