CLI工具

安装

三种安装方式任选其一

1. go get 安装

  1. go get -u github.com/go-kratos/kratos/cmd/kratos/v2@latest

2. go install 安装

  1. go install github.com/go-kratos/kratos/cmd/kratos/v2
  2. # go 1.16版本以上需要指定版本号或使用最新版
  3. 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 文件

kratos-layout 项目中对 proto 文件进行了版本划分,放在了 v1 子目录下

  1. kratos proto add api/helloworld/demo.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 CreateDemo (CreateDemoRequest) returns (CreateDemoReply);
  8. rpc UpdateDemo (UpdateDemoRequest) returns (UpdateDemoReply);
  9. rpc DeleteDemo (DeleteDemoRequest) returns (DeleteDemoReply);
  10. rpc GetDemo (GetDemoRequest) returns (GetDemoReply);
  11. rpc ListDemo (ListDemoRequest) returns (ListDemoReply);
  12. }
  13. message CreateDemoRequest {}
  14. message CreateDemoReply {}
  15. message UpdateDemoRequest {}
  16. message UpdateDemoReply {}
  17. message DeleteDemoRequest {}
  18. message DeleteDemoReply {}
  19. message GetDemoRequest {}
  20. message GetDemoReply {}
  21. message ListDemoRequest {}
  22. message ListDemoReply {}

生成 Proto 代码

  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

输出:
internal/service/demo.go

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

运行项目

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

查看版本

查看工具版本:

  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 查看帮助

  1. kratos -h
  2. kratos new -h