CLI工具

安装

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

创建项目

通过 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

使用 --nomod 添加服务,共用 go.mod ,大仓模式

  1. kratos new helloworld
  2. cd helloworld
  3. kratos new app/user --nomod

输出:

  1. .
  2. ├── Dockerfile
  3. ├── LICENSE
  4. ├── Makefile
  5. ├── README.md
  6. ├── api
  7. └── helloworld
  8. └── v1
  9. ├── error_reason.pb.go
  10. ├── error_reason.proto
  11. ├── greeter.pb.go
  12. ├── greeter.proto
  13. ├── greeter_grpc.pb.go
  14. └── greeter_http.pb.go
  15. ├── app
  16. └── user
  17. ├── Dockerfile
  18. ├── Makefile
  19. ├── cmd
  20. └── user
  21. ├── main.go
  22. ├── wire.go
  23. └── wire_gen.go
  24. ├── configs
  25. └── config.yaml
  26. ├── internal
  27. ├── biz
  28. ├── biz.go
  29. └── greeter.go
  30. ├── conf
  31. ├── conf.pb.go
  32. └── conf.proto
  33. ├── data
  34. ├── data.go
  35. └── greeter.go
  36. ├── server
  37. ├── grpc.go
  38. ├── http.go
  39. └── server.go
  40. └── service
  41. ├── greeter.go
  42. └── service.go
  43. └── openapi.yaml
  44. ├── cmd
  45. └── helloworld
  46. ├── main.go
  47. ├── wire.go
  48. └── wire_gen.go
  49. ├── configs
  50. └── config.yaml
  51. ├── go.mod
  52. ├── go.sum
  53. ├── internal
  54. ├── biz
  55. ├── README.md
  56. ├── biz.go
  57. └── greeter.go
  58. ├── conf
  59. ├── conf.pb.go
  60. └── conf.proto
  61. ├── data
  62. ├── README.md
  63. ├── data.go
  64. └── greeter.go
  65. ├── server
  66. ├── grpc.go
  67. ├── http.go
  68. └── server.go
  69. └── service
  70. ├── README.md
  71. ├── greeter.go
  72. └── service.go
  73. ├── openapi.yaml
  74. └── third_party
  75. ├── README.md
  76. ├── errors
  77. └── errors.proto
  78. ├── google
  79. ├── api
  80. ├── annotations.proto
  81. ├── client.proto
  82. ├── field_behavior.proto
  83. ├── http.proto
  84. └── httpbody.proto
  85. └── protobuf
  86. └── descriptor.proto
  87. └── validate
  88. ├── README.md
  89. └── validate.proto

添加 Proto 文件

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

  1. kratos proto add api/helloworld/v1/demo.proto

输出:

api/helloworld/v1/demo.proto

  1. syntax = "proto3";
  2. package api.helloworld.v1;
  3. option go_package = "helloworld/api/helloworld/v1;v1";
  4. option java_multiple_files = true;
  5. option java_package = "api.helloworld.v1";
  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/v1/demo.proto

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

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

生成 Service 代码

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

使用 -t 指定生成目录

  1. kratos proto server api/helloworld/v1/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