精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久久久久久久97黄色工厂| 欧美日本国产| 欧美日韩日本视频| 一本一生久久a久久精品综合蜜 | 欧美一二区在线观看| 欧美性大战久久久久久久蜜臀| 国产精品99久久久久久大便| 人妻少妇精品无码专区| 日一区二区三区| 久久中国妇女中文字幕| 美女又爽又黄免费| 欧美电影在线观看网站| 亚洲第一久久影院| 亚洲黄色成人久久久| 亚洲精品国产av| 肉肉av福利一精品导航| 欧美日本啪啪无遮挡网站| 中文字幕在线免费看线人| 国产原创一区| 午夜精品影院在线观看| 一区二区三区我不卡| 亚洲精品一区二区口爆| 日本aⅴ免费视频一区二区三区 | jizz亚洲少妇| 久久av电影| 欧美第一区第二区| 日本特黄a级片| 制服丝袜专区在线| 亚洲综合激情网| 亚洲最新在线| 国产高清免费av在线| 国产寡妇亲子伦一区二区| 国产精品第七十二页| 日韩av在线天堂| 一本一道久久a久久精品蜜桃| 亚洲欧洲免费视频| www国产视频| 精品一区91| 69p69国产精品| 99热这里只有精品在线播放| 狼人综合视频| 亚洲国产日韩在线一区模特| 欧美h视频在线观看| av在线电影院| 国产欧美一区二区精品秋霞影院| 久久精品国产第一区二区三区最新章节| av老司机久久| 国产一区在线观看视频| 国产精品亚洲一区二区三区| 精品久久久久久久久久久国产字幕| 亚洲精品1234| 国产69精品久久久久9999| 久久久久久久国产视频| 亚洲最新色图| 欧美老女人性视频| 久久久久久久久久一区二区三区| 亚洲精品久久久| www国产亚洲精品久久网站| 精品一区二区三区蜜桃在线| 奇米色欧美一区二区三区| 亚洲欧美日韩国产中文| mm131美女视频| 九九免费精品视频在线观看| 亚洲欧美国产精品| 日韩女同一区二区三区| 日韩电影在线视频| 久久精品视频va| 日韩激情综合网| 欧美 日韩 国产一区二区在线视频| 福利在线午夜| 成人免费福利片| 国产成人精品日本亚洲11| 亚洲AV无码精品国产| 成人手机电影网| 激情小说综合网| 日本一级在线观看| 欧美国产成人精品| 一区二区三区日韩视频| 日韩免费影院| 精品日韩美女的视频高清| 老司机午夜av| 亚洲综合资源| 欧美精品一区男女天堂| 菠萝菠萝蜜网站| 凹凸成人精品亚洲精品密奴| 久久精品精品电影网| 国产一级大片在线观看| 欧美一级久久| 成人激情春色网| 日本高清视频免费观看| 久久亚洲一区二区三区四区| 亚洲精品国产精品国自产| av片在线观看网站| 欧美日韩性视频| 99久久99精品| 窝窝社区一区二区| 久久久精品国产亚洲| 日本少妇在线观看| 免费高清成人在线| 国产欧美精品一区二区三区| 国产高清一区在线观看| 亚洲综合激情网| 中文字幕一区二区三区四区在线视频| 久久精品一级| 亚洲久久久久久久久久| 欧美特黄一级片| 国产一区成人| 18成人免费观看网站下载| 日本在线丨区| 一区二区三区免费观看| 手机看片福利日韩| 国产精品18hdxxxⅹ在线| 中文字幕欧美亚洲| 国产香蕉视频在线| 国产一区二区美女| 日韩理论片在线观看| 黄色成人在线网| 欧美人成免费网站| 免费看污片网站| 精品999网站| 国产综合色香蕉精品| 亚洲aⅴ乱码精品成人区| 亚洲欧美aⅴ...| 日本熟妇人妻中出| 五月综合久久| 久久久久免费精品国产| 国产裸体永久免费无遮挡| 久久久一区二区三区捆绑**| 国产一区二区三区乱码| 电影91久久久| 中日韩午夜理伦电影免费| 日韩精品视频免费看| 国产伦精品一区二区三区免费迷 | 精品人妻aV中文字幕乱码色欲| 国产欧美日韩久久| 青青草原av在线播放| 国产精品22p| 久久久久久久国产| 精品国产乱码一区二区三| 中文字幕日韩精品一区| 日日躁夜夜躁aaaabbbb| 精品欧美激情在线观看| va亚洲va日韩不卡在线观看| 国内自拍欧美激情| 亚洲h视频在线观看| 日韩美女视频19| 91视频这里只有精品| 日韩精品91| 国产精品专区h在线观看| 国产www.大片在线| 91久久人澡人人添人人爽欧美| 黄色网址在线视频| 夜久久久久久| 精品国产一区二区三| 国产极品在线观看| 亚洲国产日韩欧美在线99| 久草国产在线观看| 成人av资源站| 国产 日韩 亚洲 欧美| 第四色中文综合网| 97精品免费视频| 青青草在线播放| 在线影院国内精品| 青青操在线播放| 国内精品写真在线观看| 日本三日本三级少妇三级66| 电影91久久久| 欧美精品激情在线| 日韩永久免费视频| 精品国产乱码久久久久久天美| 国产精品无码午夜福利| 免费一级欧美片在线播放| 欧美二区三区在线| 午夜精品久久久久久久蜜桃| www.丝袜精品| 国内精品一区二区三区| 午夜国产在线观看| 色94色欧美sute亚洲线路一久 | 91视频国产资源| 激情网站五月天| 天天射成人网| 国产一区二区三区四区五区在线 | 亚洲成人自拍一区| 美女脱光内衣内裤| 激情综合色丁香一区二区| 亚洲乱码日产精品bd在线观看| 日本中文字幕在线一区| 国产精品久久久久久久久久| 黄色免费网站在线| 亚洲第一天堂av| 最近中文字幕在线免费观看| 亚洲免费观看高清完整版在线观看熊| 四虎精品一区二区| 日本视频在线一区| 欧美黑人在线观看| 深爱激情综合网| 亚洲专区中文字幕| 欧美舌奴丨vk视频| 欧美成人精品在线观看| 色视频在线观看福利| 欧美日韩高清一区二区三区| 四虎成人精品永久免费av| 国产欧美精品区一区二区三区 | 青草视频在线观看视频| 欧美男男gaytwinkfreevideos| 91免费高清视频| 台湾佬中文娱乐久久久| 九九热精品在线| 超碰国产在线| 亚洲精品不卡在线| 国产男男gay体育生白袜| 一本色道a无线码一区v| 久久久久成人网站| 国产欧美精品一区二区色综合朱莉| 岛国精品一区二区三区| 久久国产精品99精品国产| aⅴ在线免费观看| 亚洲精品成av人片天堂无码| 精品午夜久久福利影院| 国产精品亚洲αv天堂无码| 自由日本语亚洲人高潮| 日韩免费中文专区| 欧美中文一区| 波多野结衣久草一区| 欧美xxxx网站| 国产精品久久久久久网站| 国产乱码午夜在线视频| 欧美成人手机在线| 在线看av的网址| 亚洲色图日韩av| 外国精品视频在线观看| 日韩精品一区二区三区视频在线观看 | 99久久99久久久精品齐齐| 污污视频网站在线| 强制捆绑调教一区二区| 国产淫片av片久久久久久| 亚洲深夜av| 成人免费在线网| 欧美另类综合| 91嫩草国产丨精品入口麻豆| 日韩久久视频| 亚洲国产一区二区三区在线| 亚洲免费专区| 久久久综合香蕉尹人综合网| 精品按摩偷拍| 国产一区二区三区免费不卡| 亚洲午夜免费| 俄罗斯精品一区二区| 天堂av一区| wwwxx欧美| 成人自拍在线| 国产综合欧美在线看| 狠狠一区二区三区| 黑人巨大精品欧美一区二区小视频 | 亚洲一区二区三区中文字幕在线| 2021亚洲天堂| 亚洲综合男人的天堂| 国产亚洲精品久久久久久无几年桃| 亚洲精品欧美激情| 日韩欧美中文字幕视频| 一区二区三区精密机械公司| 久久中文字幕在线观看| 亚洲国产欧美日韩另类综合| 你懂的国产视频| 一本大道久久精品懂色aⅴ| 中文字幕一区在线播放| 色94色欧美sute亚洲线路一久| 波多野结衣黄色| 欧美另类videos死尸| 国产免费高清av| 欧美大片免费久久精品三p| 肥臀熟女一区二区三区| 亚洲精美色品网站| 免费一级在线观看播放网址| 伊人久久久久久久久久| 欧美黑人激情| 欧美激情一区二区三区高清视频 | 国产精品乱人伦中文| 日韩欧美综合视频| 亚洲一区二区三区视频在线| 91porny在线| 欧美视频中文字幕| av免费在线不卡| 亚洲国产高清福利视频| 蜜桃成人在线视频| 久久天天躁狠狠躁夜夜躁| 久久99亚洲网美利坚合众国| 日本sm极度另类视频| 玖玖精品在线| 国产亚洲精品自在久久| 黑人操亚洲人| 久久观看最新视频| 性久久久久久| 91精产国品一二三产区别沈先生| 成人av电影在线| 天天摸日日摸狠狠添| 一区二区三区免费在线观看| 精品成人无码久久久久久| 正在播放亚洲一区| 青青青草原在线| 俺也去精品视频在线观看| 日本蜜桃在线观看视频| 国产精品自产拍高潮在线观看| 久久丝袜视频| 久久久成人精品一区二区三区| 亚洲专区免费| 伦伦影院午夜理论片| 国产清纯在线一区二区www| 好吊色视频在线观看| 欧美影视一区二区三区| 少妇av在线播放| 久久精品国产一区| 欧美成人资源| 国产精品久久亚洲7777| 成人久久综合| 日韩精品视频久久| 国产成人午夜精品影院观看视频| 久久亚洲无码视频| 亚洲成人动漫在线观看| 国产精品无码一区二区桃花视频 | 欧美黑人激情| 国产精品黄色影片导航在线观看| 超碰成人免费| 日本人妻伦在线中文字幕| 久久99精品久久久久久国产越南 | 高清欧美一区二区三区| 日韩欧国产精品一区综合无码| 欧美成人蜜桃| 99日韩精品| 成年女人免费视频| 亚洲视频一区二区免费在线观看| 亚洲 欧美 日韩 在线| 亚洲精品大尺度| 免费在线看污片| 91亚洲精品久久久| 天天影视天天精品| 国产成人黄色网址| 久久久久久黄色| 国产成人无码精品| 精品国产a毛片| 日本在线观看高清完整版| 91青草视频久久| 亚洲成人二区| 色偷偷中文字幕| 亚洲人亚洲人成电影网站色| 国产精品久久久久久久免费看 | 高清国产一区| 亚洲手机视频| 91精品国产三级| 一个色在线综合| 亚洲av无码国产综合专区 | 少妇被躁爽到高潮无码文| 欧美美女视频在线观看| 日本在线人成| 亚洲iv一区二区三区| 伊人久久大香线| 久久发布国产伦子伦精品| 亚洲精品久久7777| 亚洲乱熟女一区二区| 欧美精品videosex牲欧美| 粉嫩一区二区三区四区公司1| 国产96在线 | 亚洲| 95精品视频在线| 99re这里只有精品在线| 一区二区中文字幕| 欧美一级在线| 亚洲乱码日产精品bd在线观看| 粉嫩在线一区二区三区视频| 日韩精品一区二区av| 亚洲欧美视频在线| 日韩三级成人| 嫩草影院中文字幕| 99久久99久久免费精品蜜臀| 波多野结衣黄色| 久久伊人精品一区二区三区| www.成人网| 成人性做爰aaa片免费看不忠| 老司机深夜福利在线观看| 欧美一级视频在线观看| 精品一区二区三区中文字幕老牛| 日韩精品视频一二三| 一区二区成人在线视频| 亚洲欧美日本在线观看| 国产精品视频网| 午夜欧美理论片| 亚洲av无码成人精品国产 | 国产乱淫片视频| 欧美精品videosex牲欧美| 久久99青青| 天天爽夜夜爽视频| 欧美性生交大片免网| 黄色成年人视频在线观看| 国产精品欧美久久| 青草国产精品久久久久久| 久久久精品一区二区涩爱| 一区二区三区四区在线观看视频| 色妞ww精品视频7777| caopor在线视频| 亚洲一区在线免费观看| 成年人视频在线观看免费|