CLI工具

    1. go get 安装

    2. go install 安装

    1. # go 1.16版本以上需要指定版本号或使用最新版
    2. go install github.com/go-kratos/kratos/cmd/kratos/v2@latest

    3. 源码编译安装

    1. git clone https://github.com/go-kratos/kratos
    2. cd kratos
    3. make install

    创建项目

    通过 kratos 命令创建项目模板:

    1. kratos new helloworld

    使用 -r 指定源

    1. # 国内拉取失败可使用gitee源
    2. kratos new helloworld -r https://gitee.com/go-kratos/kratos-layout.git
    3. # 亦可使用自定义的模板
    4. kratos new helloworld -r xxx-layout.git
    5. # 同时也可以通过环境变量指定源
    6. KRATOS_LAYOUT_REPO=xxx-layout.git
    7. kratos new helloworld

    使用 -b 指定分支

    1. kratos new helloworld -b main

    添加 Proto 文件

    api/helloworld/demo.proto

    1. syntax = "proto3";
    2. package api.helloworld;
    3. option go_package = "helloworld/api/helloworld;helloworld";
    4. option java_multiple_files = true;
    5. option java_package = "api.helloworld";
    6. service Demo {
    7. rpc UpdateDemo (UpdateDemoRequest) returns (UpdateDemoReply);
    8. rpc DeleteDemo (DeleteDemoRequest) returns (DeleteDemoReply);
    9. rpc GetDemo (GetDemoRequest) returns (GetDemoReply);
    10. rpc ListDemo (ListDemoRequest) returns (ListDemoReply);
    11. }
    12. message CreateDemoRequest {}
    13. message UpdateDemoRequest {}
    14. message UpdateDemoReply {}
    15. message DeleteDemoRequest {}
    16. message DeleteDemoReply {}
    17. message GetDemoRequest {}
    18. message GetDemoReply {}
    19. message ListDemoRequest {}
    20. message ListDemoReply {}
    1. # 可以直接通过 make 命令生成
    2. make api
    3. # 或使用 kratos cli 进行生成
    4. kratos proto client api/helloworld/demo.proto

    会在proto文件同目录下生成:

    1. api/helloworld/demo.pb.go
    2. api/helloworld/demo_grpc.pb.go
    3. # 注意 http 代码只会在 proto 文件中声明了 http 时才会生成
    4. api/helloworld/demo_http.pb.go

    生成 Service 代码

    通过 proto文件,可以直接生成对应的 Service 实现代码:

    使用 -t 指定生成目录

    1. kratos proto server api/helloworld/demo.proto -t internal/service
    1. package service
    2. import (
    3. "context"
    4. pb "helloworld/api/helloworld"
    5. )
    6. type DemoService struct {
    7. pb.UnimplementedDemoServer
    8. func NewDemoService() *DemoService {
    9. return &DemoService{}
    10. }
    11. func (s *DemoService) CreateDemo(ctx context.Context, req *pb.CreateDemoRequest) (*pb.CreateDemoReply, error) {
    12. return &pb.CreateDemoReply{}, nil
    13. }
    14. func (s *DemoService) UpdateDemo(ctx context.Context, req *pb.UpdateDemoRequest) (*pb.UpdateDemoReply, error) {
    15. return &pb.UpdateDemoReply{}, nil
    16. }
    17. func (s *DemoService) DeleteDemo(ctx context.Context, req *pb.DeleteDemoRequest) (*pb.DeleteDemoReply, error) {
    18. return &pb.DeleteDemoReply{}, nil
    19. }
    20. func (s *DemoService) GetDemo(ctx context.Context, req *pb.GetDemoRequest) (*pb.GetDemoReply, error) {
    21. return &pb.GetDemoReply{}, nil
    22. }
    23. func (s *DemoService) ListDemo(ctx context.Context, req *pb.ListDemoRequest) (*pb.ListDemoReply, error) {
    24. return &pb.ListDemoReply{}, nil
    25. }

    运行项目

    • 如子目录下有多个项目则出现选择菜单

    查看工具版本:

    1. kratos -v

    输出:

    1. kratos version v2.2.0

    工具升级

    将升级以下工具

    • Kratos与工具自身
    • protoc相关的生成插件
    1. kratos upgrade

    更新日志

    1. # 等同于打印 https://github.com/go-kratos/kratos/releases/latest 的版本更新日志
    2. kratos changelog
    3. # 打印指定版本更新日志
    4. kratos changelog v2.1.4
    5. # 查看自上次版本发布后的更新日志
    6. kratos changelog dev

    任何命令下加 -h 查看帮助