Go-Kratos 示例项目教程
1. 项目的目录结构及介绍
Go-Kratos 示例项目的目录结构如下:
examples/
├── README.md
├── api
│ └── helloworld
│ ├── helloworld.pb.go
│ ├── helloworld.proto
│ └── helloworld_grpc.pb.go
├── cmd
│ └── helloworld
│ └── main.go
├── configs
│ └── config.yaml
├── go.mod
├── go.sum
└── internal
└── service
└── service.go
目录结构介绍
- api: 存放项目的API定义文件,包括
.proto文件及其生成的.go文件。 - cmd: 存放项目的启动文件,通常包含
main.go。 - configs: 存放项目的配置文件,如
config.yaml。 - internal: 存放项目的内部实现,如服务实现文件。
- go.mod 和 go.sum: Go模块文件,用于管理项目的依赖。
2. 项目的启动文件介绍
项目的启动文件位于cmd/helloworld/main.go。以下是该文件的主要内容:
package main
import (
"github.com/go-kratos/kratos/v2"
"github.com/go-kratos/kratos/v2/config"
"github.com/go-kratos/kratos/v2/config/file"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/middleware/recovery"
"github.com/go-kratos/kratos/v2/transport/grpc"
"github.com/go-kratos/kratos/v2/transport/http"
"helloworld/internal/service"
)
func main() {
logger := log.NewStdLogger(os.Stdout)
log := log.NewHelper(logger)
c := config.New(
config.WithSource(
file.NewSource("configs/config.yaml"),
),
)
if err := c.Load(); err != nil {
panic(err)
}
var bc conf.Bootstrap
if err := c.Scan(&bc); err != nil {
panic(err)
}
srv := service.NewHelloService()
httpSrv := http.NewServer(
http.Address(bc.Server.Http.Addr),
http.Timeout(bc.Server.Http.Timeout),
)
grpcSrv := grpc.NewServer(
grpc.Address(bc.Server.Grpc.Addr),
grpc.Timeout(bc.Server.Grpc.Timeout),
)
app := kratos.New(
kratos.Name("helloworld"),
kratos.Version("latest"),
kratos.Logger(logger),
kratos.Server(httpSrv, grpcSrv),
)
if err := app.Run(); err != nil {
log.Errorf("failed to run app: %v", err)
}
}
启动文件介绍
- 配置加载: 使用
config.New和file.NewSource加载配置文件configs/config.yaml。 - 日志初始化: 初始化日志记录器。
- 服务初始化: 初始化服务实例。
- HTTP和gRPC服务器配置: 配置HTTP和gRPC服务器,并将其添加到应用中。
- 应用启动: 使用
kratos.New创建应用实例并启动。
3. 项目的配置文件介绍
项目的配置文件位于configs/config.yaml。以下是该文件的主要内容:
server:
http:
addr: ":8000"
timeout: 1s
grpc:
addr: ":9000"
timeout: 1s
配置文件介绍
- HTTP服务器配置: 配置HTTP服务器的地址和超时时间。
- gRPC服务器配置:
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



