Go Kratos 是一个基于 Go 语言的微服务框架,旨在帮助开发者快速构建高性能、可扩展的微服务应用。本文将介绍如何安装和配置 Go Kratos,并创建一个简单的微服务示例。
1. 环境准备 首先,确保你的开发环境中已经安装了以下工具: Go 语言环境:建议使用 1.16 及以上版本。 Git:用于克隆代码仓库。 Make:用于执行构建脚本。
2. 安装 Go Kratos 你可以通过以下命令安装 Go Kratos 的 CLI 工具:
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
3. 创建一个新的 Kratos 项
使用 Kratos CLI 创建一个新的项目
kratos new hello-world
cd hello-world
hello-world/
├── api
│ └── helloworld.proto
├── build
│ ├── Dockerfile
│ └── Makefile
├── conf
│ ├── config.yaml
│ └── tracing.yaml
├── internal
│ ├── biz
│ │ └── greeter.go
│ ├── conf
│ │ └── config.go
│ ├── data
│ │ └── greeter.go
│ ├── server
│ │ ├── grpc.go
│ │ └── http.go
│ └── service
│ └── greeter.go
├── pkg
│ └── log
│ └── logger.go
└── main.go
4. 项目结构说明
api/:存放 API 定义文件,通常使用 Protocol Buffers (protobuf)。
build/:存放构建相关的文件,如 Dockerfile 和 Makefile。
conf/:存放配置文件,如 config.yaml 和 tracing.yaml。
internal/:存放业务逻辑代码,分为 biz、conf、data、server 和 service 子目录。
pkg/:存放公共库代码。
main.go:程序入口文件
5. 编写 API 定义
在 api/helloworld.proto 文件中定义一个简单的 API:
syntax = "proto3";
package helloworld;
option go_package = "github.com/yourusername/hello-world/api;api";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
6. 生成代码
使用 Kratos CLI 生成必要的代码:
kratos api go ./api/helloworld.proto
这将生成 internal/service/greeter.go 和 internal/server/grpc.go 等文件
7. 实现业务逻辑
在 internal/service/greeter.go 中实现业务逻辑:
package service
import (
"context"
"fmt"
"github.com/yourusername/hello-world/api"
)
type GreeterService struct{}
func (s *GreeterService) SayHello(ctx context.Context, req *api.HelloRequest) (*api.HelloReply, error) {
return &api.HelloReply{Message: fmt.Sprintf("Hello %s", req.Name)}, nil
}
8. 配置服务
编辑 conf/config.yaml 文件,配置服务端口和其他参数:
server:
http:
network: tcp
addr: :8000
grpc:
network: tcp
addr: :9000
9. 启动服务
使用 Makefile 启动服务:
make run
10. 测试服务
你可以使用 curl 或者 grpcurl 来测试 HTTP 和 gRPC 服务。 HTTP 测试:
curl -X POST -H "Content-Type: application/json" -d '{"name": "World"}' http://localhost:8000/sayHello
gRPC 测试:
grpcurl -plaintext -d '{"name": "World"}' localhost:9000 helloworld.Greeter/SayHello
总结
通过以上步骤,已经成功创建了一个基于 Go Kratos 的简单微服务。