Kratos 项目教程
1. 项目的目录结构及介绍
Kratos 项目的目录结构通常遵循以下模式:
kratos/
├── api/
│ ├── helloworld/
│ │ ├── v1/
│ │ │ ├── helloworld.proto
│ │ │ ├── helloworld_grpc.pb.go
│ │ │ ├── helloworld.pb.go
│ │ │ └── helloworld_http.pb.go
├── cmd/
│ ├── helloworld/
│ │ └── main.go
├── configs/
│ └── config.yaml
├── internal/
│ ├── biz/
│ │ └── biz.go
│ ├── data/
│ │ └── data.go
│ ├── service/
│ │ └── service.go
│ └── server/
│ └── server.go
├── go.mod
├── go.sum
└── README.md
目录介绍
- api/: 存放项目的 API 定义文件,通常是 Protobuf 文件及其生成的 Go 代码。
- cmd/: 存放项目的启动文件,通常是
main.go
。 - configs/: 存放项目的配置文件,如
config.yaml
。 - internal/: 存放项目的内部逻辑代码,包括业务逻辑 (
biz/
)、数据访问 (data/
)、服务层 (service/
) 和 服务器配置 (server/
)。 - go.mod 和 go.sum: Go 模块文件,用于管理项目的依赖。
- README.md: 项目说明文档。
2. 项目的启动文件介绍
项目的启动文件通常位于 cmd/
目录下,例如 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/http"
"helloworld/internal/server"
"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 server.Bootstrap
if err := c.Scan(&bc); err != nil {
panic(err)
}
srv := service.NewHelloWorldService()
httpSrv := http.NewServer(
http.Address(bc.Server.HTTP.Addr),
http.Timeout(bc.Server.HTTP.Timeout),
)
httpSrv.HandlePrefix("/", srv)
app := kratos.New(
kratos.Name("helloworld"),
kratos.Server(httpSrv),
)
if err := app.Run(); err != nil {
log.Errorf("failed to run app: %v", err)
}
}
启动文件介绍
- 导入依赖: 导入 Kratos 和其他必要的包。
- 配置加载: 从
configs/config.yaml
加载配置。 - 服务初始化: 初始化服务和 HTTP 服务器。
- 应用启动: 使用 Kratos 应用框架启动应用。
3. 项目的配置文件介绍
项目的配置文件通常位于 configs/
目录下,例如 configs/config.yaml
。以下是一个典型的配置文件示例:
server:
http:
addr: ":8000"
timeout: 1s
grpc: