Kratos Quick Start

一.查看Kratos官方文档以及源码

Kratos源码
Kratos官方文档

查看如下路径,创建新的项目
创建新项目

Required

二.Installing

go install 安装:
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
kratos upgrade
源码编译安装:
git clone https://github.com/go-kratos/kratos
cd kratos
make install

以Kratos中example中blog为例

Kratos new blog

项目目录如下图所示:

使用kratos命令的项目,本质上是从github上拉取的一个创建好的helloworld项目,如果要创建自己的项目,还需要修改如下目录:

用命令生成对应的service文件夹下文件。
然后 biz/data 要新建对应文件编写对应代码。 
最后 改 
/internal/server/grpc.go 
/internal/server/http.go 
data/data.go
biz/biz.go
添加对应的注入代码

在这里插入图片描述

biz/data 要新建对应文件编写对应代码

在这里插入图片描述

修改/internal/server/grpc.go 
/internal/server/http.go 

在这里插入图片描述

修改data/data.go

在这里插入图片描述

修改biz/biz.go

在这里插入图片描述

修改/internal/service/service.go

在这里插入图片描述

输入命令:

go generate ./...

在这里插入图片描述

go build -o ./bin/ ./...

如果报错了,就运行make all命令,如果还是报错就检查一下MakeFile(github上的那个MakeFile缺少wire相关指令) MakeFile文件在最后面

在这里插入图片描述
在这里插入图片描述

./bin/blog -conf ./configs

在这里插入图片描述
新建Kratos项目

三.添加自定义服务模块(参见项目生成的readme.md文件)

1.新建模块

// 新建一个proto文件(即模块对应的接口文档)
kratos proto add api/{server}/{server}.proto  

修改接口满足需求

2.生成对应的代码

kratos proto client api/server/server.proto

3.生成对应的服务端接口代码, 目标文件internal/service

kratos proto server api/server/server.proto -t internal/service

4.添加实现

internal/bizinternal/data下添加对应模块实现代码。一般为同名文件。

5.添加注入关联(kratos是使用wire进行依赖注入的)

internal/server/grpc.go // grpc服务注册
internal/server/http.go // http服务注册
internal/data/data.go 
internal/biz/biz.go
internal/service/service.go
添加对应的注入代码

6.生成新的依赖注入代码

go generate ./...

7.生成编译

// windows
go build -o ./bin/ ./...   
// linux 
make build 

8.杂项

proto文件修改,如何生成新的proto文件

执行命令 `make api `

9.为什么proto文件没有生成http.pb.go文件

proto文件没有包含http声明。 示例:

service ShopInterface {
    rpc Register (RegisterReq) returns (RegisterReply) {
        option (google.api.http) = {
            post: "/v1/register"
            body: "*"
        };
    }
}

10.DB连接放在哪里

internal/data/data.go文件中

// Data .
type Data struct {
	// TODO wrapped database client
	db *xorm.Engine
}

// NewData .
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {
	engine, err := xorm.NewEngine(c.Database.Driver, c.Database.Source)
	if err != nil {
		return nil, nil, err
	}

	cleanup := func() {
		log.NewHelper(logger).Info("closing the data resources")
		engine.Close()
	}

	return &Data{
		db: engine,
	}, cleanup, nil
}

四.报错问题

1.缺少wire
在这里插入图片描述

go get github.com/google/wire/cmd/wire@v0.5.0

MakeFile文件:

GOPATH:=$(shell go env GOPATH)
VERSION=$(shell git describe --tags --always)
INTERNAL_PROTO_FILES=$(shell find internal -name *.proto)
API_PROTO_FILES=$(shell find api -name *.proto)

.PHONY: init
# init env
init:
	go get -u github.com/go-kratos/kratos/cmd/kratos/v2
	go get -u google.golang.org/protobuf/cmd/protoc-gen-go
	go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
	go get -u github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2
	go get -u github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2

.PHONY: errors
# generate errors code
errors:
	protoc --proto_path=. \
               --proto_path=./third_party \
               --go_out=paths=source_relative:. \
               --go-errors_out=paths=source_relative:. \
               $(API_PROTO_FILES)

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

.PHONY: api
# generate api proto
api:
	protoc --proto_path=. \
	       --proto_path=./third_party \
 	       --go_out=paths=source_relative:. \
 	       --go-http_out=paths=source_relative:. \
 	       --go-grpc_out=paths=source_relative:. \
	       $(API_PROTO_FILES)

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

.PHONY: generate
# generate
generate:
	go generate ./...


# generate wire
wire:
	cd cmd/blog && wire

# run
.PHONY: run
run:
	cd cmd/blog/ && go run .

.PHONY: all
# generate all
all:
	make api;
	make errors;
	make config;
	make generate;

# show help
help:
	@echo ''
	@echo 'Usage:'
	@echo ' make [target]'
	@echo ''
	@echo 'Targets:'
	@awk '/^[a-zA-Z\-\_0-9]+:/ { \
	helpMessage = match(lastLine, /^# (.*)/); \
		if (helpMessage) { \
			helpCommand = substr($$1, 0, index($$1, ":")-1); \
			helpMessage = substr(lastLine, RSTART + 2, RLENGTH); \
			printf "\033[36m%-22s\033[0m %s\n", helpCommand,helpMessage; \
		} \
	} \
	{ lastLine = $$0 }' $(MAKEFILE_LIST)

.DEFAULT_GOAL := help

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值