Back to Kratos

Kratos

README_zh.md

3.0.06.0 KB
Original Source
<p align="center"><a href="https://go-kratos.dev/" target="_blank"></a></p> <p align="center"> <a href="https://github.com/go-kratos/kratos/actions"></a> <a href="https://pkg.go.dev/github.com/go-kratos/kratos/v3"></a> <a href="https://deepwiki.com/go-kratos/kratos"></a> <a href="https://codecov.io/gh/go-kratos/kratos"></a> <a href="https://goreportcard.com/report/github.com/go-kratos/kratos"></a> <a href="https://github.com/go-kratos/kratos/blob/main/LICENSE"></a> <a href="https://github.com/avelino/awesome-go"></a> <a href="https://discord.gg/BWzJsUJ"></a> </p> <p align="center"> <a href="https://trendshift.io/repositories/3233" target="_blank"></a> <a href="https://www.producthunt.com/posts/go-kratos?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-go-kratos" target="_blank"></a> </p>

Translations: English | 简体中文

Kratos

Kratos 是一套轻量级 Go 微服务框架,围绕传输、Middleware、注册发现、配置、日志、编码和代码生成提供清晰的基础能力,让业务代码保持聚焦。

功能特性

  • 以 Protobuf 为中心定义 API,并生成 HTTP/gRPC 代码。
  • 统一的 Transport 抽象,支持 HTTPgRPC
  • 可组合的 Middleware,覆盖 Recovery、Logging、Validation、Tracing、Metrics、Auth 等场景。
  • 插件化的 RegistryConfigEncoding 能力。
  • 基于标准库 log/slog 的日志能力,OpenTelemetry 扩展由 contrib 包提供。
  • 统一的 Metadata、Errors、Validation、OpenAPI 和代码生成工作流。
  • contrib 生态提供注册中心、配置中心、Middleware、编码和可观测性等可选集成。

安装

环境要求

安装 CLI

shell
go install github.com/go-kratos/kratos/cmd/kratos/v3@latest
kratos upgrade

创建服务

shell
kratos new helloworld
cd helloworld
go mod tidy
kratos run

服务启动后访问 http://localhost:8000/helloworld/kratos

如果需要从 proto 开始生成服务代码:

shell
kratos proto add api/helloworld/helloworld.proto
kratos proto client api/helloworld/helloworld.proto
kratos proto server api/helloworld/helloworld.proto -t internal/service
go generate ./...
kratos run

使用示例

go
package main

import (
	"github.com/go-kratos/kratos/v3"
	"github.com/go-kratos/kratos/v3/transport/grpc"
	"github.com/go-kratos/kratos/v3/transport/http"
)

func main() {
	httpSrv := http.NewServer(http.Address(":8000"))
	grpcSrv := grpc.NewServer(grpc.Address(":9000"))

	app := kratos.New(
		kratos.Name("helloworld"),
		kratos.Version("v1.0.0"),
		kratos.Server(httpSrv, grpcSrv),
	)
	if err := app.Run(); err != nil {
		panic(err)
	}
}

v3 迁移

Kratos v3 进一步降低核心依赖,并将历史上隐式的行为显式化。升级生产服务前请先阅读 v2 到 v3 迁移指南

扩展阅读

开发

shell
make test
make lint

社区

安全

如果你发现 Kratos 存在安全漏洞,请发送邮件到 [email protected]。安全问题会在公开披露前以私密方式处理。

贡献者

感谢所有为 Kratos 做出贡献的开发者。贡献流程请参考 Kratos 贡献指南

<a href="https://github.com/go-kratos/kratos/graphs/contributors"> </a>

致谢

以下项目对 Kratos 的设计有重要影响:

License

Kratos 基于 MIT license 开源。