更方便的在微信公众号阅读文章可以关注公众号:海生的go花园
image.png

一、介绍

Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。
由bilibili开源出来,在bilibili站大量使用。
官方网址:https://go-kratos.dev/docs/

本入门教程,将会教大家安装以及入门使用。

二、安装

1、安装go

可以到官网 https://go.dev/dl/
下载对应的包,然后安装。

2、安装protobuf

我们使用brew安装

brew install protobuf

安装好了后,我们可以使用 执行一下 protoc --version

➜ protoc --version
libprotoc 3.21.7

3、安装protobuf的go扩展工具 protoc-gen-go

go install google.golang.org/protobuf/cmd/protoc-gen-go

4、安装kratos

go install github.com/go-kratos/kratos/cmd/kratos/v2@latest

三、创建项目

通过 kratos 命令创建项目模板:

kratos new helloworld

我们进入helloworld查看一下文件结构

➜ cd helloworld
➜ tree

结构如下:

├── 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
├── 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

四、Kratos项目结构介绍

4.1、Makefile 文件为make命令的一个文件,我们打开有如下命令

4.1.1 make init

init:
    go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
    go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
    go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest
    go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest
    go install github.com/google/wire/cmd/wire@latest

会初始化安装这个框架的一个依赖。
如果之后自己还有一些工具之类的需要安装,可以放到这里。

4.1.2 make config

config:
    protoc --proto_path=./internal \
           --proto_path=./third_party \
            --go_out=paths=source_relative:./internal \
           $(INTERNAL_PROTO_FILES)

会生成 internal/conf/conf.pb.go 文件,提供对 internal/conf/conf.proto文件的调用方法。
internal/conf/conf.proto 文件对应的配置文件为 configs/config.yaml文件。

4.1.3 make api

api:
    protoc --proto_path=./api \
           --proto_path=./third_party \
            --go_out=paths=source_relative:./api \
            --go-http_out=paths=source_relative:./api \
            --go-grpc_out=paths=source_relative:./api \
           --openapi_out=fq_schema_naming=true,default_response=false:. \
           $(API_PROTO_FILES)

主要用来把 api目录里的定义的proto文件生成对应的go文件。
比如示例的api/helloworld/v1/greeter.proto文件生成 greeter.pb.go文件。

4.1.4 make generate

生成wire依赖注入文件

generate:
    go mod tidy
    go get github.com/google/wire/cmd/wire@latest
    go generate ./...

主要用来把helloword这个项目里的 cmd/helloword/wire.go文件生成
cmd/helloword/wire_gen.go依赖注入文件。

4.1.5 make build

build:
    mkdir -p bin/ && go build -ldflags "-X main.Version=$(VERSION)" -o ./bin/ ./...

生成可执行编译文件
我们执行一下,会在 bin目录下生成一个 helloworld可执行文件。
image.png

到此执行一下这个文件

./bin/helloworld -conf ./configs/config.yaml

image.png

可以跑成功了。安装完成。

阅读更多其他优质go语言文章,欢迎关注公众号

图片