go微服务框架Kratos(连载一):入门教程(安装以及跑通示例)

更方便的在微信公众号阅读文章可以关注公众号:海生的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语言文章,欢迎关注公众号

图片

与黑夜里,追求那一抹萤火。

52 声望
12 粉丝
0 条评论
推荐阅读
go使用net/http 创建web服务器
go作为一个对web开发友好的语言,内置了net/http库。来帮助我们实现web服务器。我们来看官方文档给我的最简单的一个文件服务器的实现。

海生

Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。

机器铃砍菜刀22阅读 55.1k评论 1

年度最佳【golang】map详解
这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。

去去100214阅读 11k评论 2

年度最佳【golang】GMP调度详解
Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析...

去去100213阅读 11.2k评论 4

【已结束】SegmentFault 思否技术征文丨浅谈 Go 语言框架
亲爱的开发者们:我们的 11 月技术征文如期而来,这次主题围绕 「 Go 」 语言,欢迎大家来参与分享~征文时间11 月 4 日 - 11 月 27 日 23:5911 月 28 日 18:00 前发布中奖名单参与条件新老思否作者均可参加征文...

SegmentFault思否11阅读 4.7k评论 11

封面图
【Go微服务】开发gRPC总共分三步
之前我也有写过RPC相关的文章:《 Go RPC入门指南:RPC的使用边界在哪里?如何实现跨语言调用?》,详细介绍了RPC是什么,使用边界在哪里?并且用Go和php举例,实现了跨语言调用。不了解RPC的同学建议先读这篇文...

王中阳Go8阅读 3.7k评论 6

封面图
【golang】sync.WaitGroup详解
上一期中,我们介绍了 sync.Once 如何保障 exactly once 语义,本期文章我们介绍 package sync 下的另一个工具类:sync.WaitGroup。

去去100213阅读 30.2k评论 2

与黑夜里,追求那一抹萤火。

52 声望
12 粉丝
宣传栏