Usage
Installation
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
Project Creation
To create a new project:
kratos new helloworld
Use -r
to specify the source
# If pull fails in China, you can use gitee source.
kratos new helloworld -r https://gitee.com/go-kratos/kratos-layout.git
# You can also use custom templates
kratos new helloworld -r xxx-layout.git
# You can also specify the source through the environment variable
KRATOS_LAYOUT_REPO=xxx-layout.git
kratos new helloworld
Use -b
to specify the branch
kratos new helloworld -b main
Use --nomod
to add services and working together using go.mod
, large warehouse mode
kratos new helloworld
cd helloworld
kratos new app/user --nomod
Output:
.
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api
│ └── helloworld
│ └── v1
│ ├── error_reason.pb.go
│ ├── error_reason.proto
│ ├── greeter.pb.go
│ ├── greeter.proto
│ ├── greeter_grpc.pb.go
│ └── greeter_http.pb.go
├── app
│ └── user
│ ├── Dockerfile
│ ├── Makefile
│ ├── cmd
│ │ └── user
│ │ ├── main.go
│ │ ├── wire.go
│ │ └── wire_gen.go
│ ├── configs
│ │ └── config.yaml
│ ├── internal
│ │ ├── biz
│ │ │ ├── biz.go
│ │ │ └── greeter.go
│ │ ├── conf
│ │ │ ├── conf.pb.go
│ │ │ └── conf.proto
│ │ ├── data
│ │ │ ├── data.go
│ │ │ └── greeter.go
│ │ ├── server
│ │ │ ├── grpc.go
│ │ │ ├── http.go
│ │ │ └── server.go
│ │ └── service
│ │ ├── greeter.go
│ │ └── service.go
│ └── openapi.yaml
├── cmd
│ └── helloworld
│ ├── main.go
│ ├── wire.go
│ └── wire_gen.go
├── configs
│ └── config.yaml
├── go.mod
├── go.sum
├── internal
│ ├── biz
│ │ ├── README.md
│ │ ├── biz.go
│ │ └── greeter.go
│ ├── conf
│ │ ├── conf.pb.go
│ │ └── conf.proto
│ ├── data
│ │ ├── README.md
│ │ ├── data.go
│ │ └── greeter.go
│ ├── server
│ │ ├── grpc.go
│ │ ├── http.go
│ │ └── server.go
│ └── service
│ ├── README.md
│ ├── greeter.go
│ └── service.go
├── openapi.yaml
└── third_party
├── README.md
├── errors
│ └── errors.proto
│ ├── api
│ │ ├── annotations.proto
│ │ ├── client.proto
│ │ ├── field_behavior.proto
│ │ ├── http.proto
│ │ └── httpbody.proto
│ └── protobuf
│ └── descriptor.proto
└── validate
├── README.md
└── validate.proto
Adding Proto files
kratos proto add api/helloworld/demo.proto
Output:
api/helloworld/demo.proto
syntax = "proto3";
package api.helloworld;
option go_package = "helloworld/api/api/helloworld;helloworld";
option java_multiple_files = true;
option java_package = "api.helloworld";
service Demo {
rpc CreateDemo (CreateDemoRequest) returns (CreateDemoReply);
rpc UpdateDemo (UpdateDemoRequest) returns (UpdateDemoReply);
rpc DeleteDemo (DeleteDemoRequest) returns (DeleteDemoReply);
rpc GetDemo (GetDemoRequest) returns (GetDemoReply);
rpc ListDemo (ListDemoRequest) returns (ListDemoReply);
}
message CreateDemoRequest {}
message CreateDemoReply {}
message UpdateDemoRequest {}
message UpdateDemoReply {}
message DeleteDemoRequest {}
message DeleteDemoReply {}
message GetDemoRequest {}
message GetDemoReply {}
message ListDemoRequest {}
message ListDemoReply {}
Generate Proto Codes
kratos proto client api/helloworld/demo.proto
Output:
api/helloworld/demo.pb.go
api/helloworld/demo_grpc.pb.go
# Attention: The http code will only be generated if http is declared in the proto file.
api/helloworld/demo_http.pb.go
Generate Service Codes
kratos can generate the bootstrap codes from the proto file.
kratos proto server api/helloworld/demo.proto -t internal/service
Output: internal/service/demo.go
package service
import (
"context"
pb "helloworld/api/helloworld"
)
type DemoService struct {
pb.UnimplementedDemoServer
}
func NewDemoService() pb.DemoServer {
return &DemoService{}
}
func (s *DemoService) CreateDemo(ctx context.Context, req *pb.CreateDemoRequest) (*pb.CreateDemoReply, error) {
return &pb.CreateDemoReply{}, nil
}
func (s *DemoService) UpdateDemo(ctx context.Context, req *pb.UpdateDemoRequest) (*pb.UpdateDemoReply, error) {
return &pb.UpdateDemoReply{}, nil
}
func (s *DemoService) DeleteDemo(ctx context.Context, req *pb.DeleteDemoRequest) (*pb.DeleteDemoReply, error) {
return &pb.DeleteDemoReply{}, nil
}
func (s *DemoService) GetDemo(ctx context.Context, req *pb.GetDemoRequest) (*pb.GetDemoReply, error) {
return &pb.GetDemoReply{}, nil
}
func (s *DemoService) ListDemo(ctx context.Context, req *pb.ListDemoRequest) (*pb.ListDemoReply, error) {
return &pb.ListDemoReply{}, nil
}
Run project
- If there are multiple items under the subdirectory, the selection menu appears
kratos run
View Version
To show the tool version
kratos -v
Output:
kratos version v2.2.1
Tool upgrade
The following tools will be upgraded
- Kratos and the tool itself
- Protoc related build plugins
kratos upgrade
Changelog
# Equivalent to printing the version changelog of https://github.com/go-kratos/kratos/releases/latest
kratos changelog
# Print the update log of the specified version
kratos changelog v2.1.4
# View the changelog since the last release
kratos changelog dev
View help
Add -h
to any command for help
kratos -h
kratos new -h