go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,etcd 是一个开源的分布式键值存储系统,用于可靠地存储分布式系统中的关键数据
1.环境准备
#官方脚手架
go install github.com/zeromicro/go-zero/tools/goctl@latest 安装go-zero脚手架,根据配置文件自动生成配置文件
#protobuf 工具
goctl env check --install --verbose --force
#框架
go get -u github.com/zeromicro/go-zero@latest
2.rpc服务端
- 编写proto配置文件user.proto文件
syntax = "proto3";
package user;
option go_package = "../proto/user";
service UserService {
rpc GetUser (UserRequest) returns (Response) {}
rpc AddUserInfo (UserInfo) returns (Response) {}
}
message UserInfo {
string name = 1;
string nickname = 2;
int64 iphone = 3;
string password = 4;
int32 status = 5;
bool is_admin = 6;
}
message UserRequest {
int64 id = 1;
}
message Response {
int64 result = 1;
bytes data = 2;
}
- 通过goctl命令生成文件
goctl rpc protoc user.proto --go_out=. --go-grpc_out=. --zrpc_out=../
- 修改yaml配置文件,并添加mysql等配置信息
Name: user.rpc
ListenOn: 0.0.0.0:8080
Etcd:
Hosts:
- 127.0.0.1:2379
Key: user.rpc
MySQLConf:
Enable: true
User: root
Password: '123456'
Host: 127.0.0.1
Port: 3306
Database: test
CharSet: utf8
ParseTime: true
TimeZOne: Local
AutoMigrate: true
Gorm:
TablePrefix: zero_
SingularTable: true
MaxOpenConns: 100
MaxIdleConns: 5
ConnMaxLifetime: 600
- 修改配置config.go文件,添加mysql配置读取结构体
// Mysql config
type MySQLConf struct {
Host string `json:"" yaml:"Host"`
Port int64 `json:"" yaml:"Port"`
User string `json:"" yaml:"User"`
Password string `json:"" yaml:"Password"`
Database string `json:"" yaml:"Database"`
CharSet string `json:"" yaml:"CharSet"`
TimeZone string `json:"" yaml:"TimeZone"`
ParseTime bool `json:"" yaml:"ParseTime"`
Enable bool `json:"" yaml:"Enable"` // use mysql or not
AutoMigrate bool `json:"" yaml:"AutoMigrate"`
Gorm GormConf `json:"" yaml:"Gorm"`
}
// gorm config
type GormConf struct {
SingularTable bool `json:"" yaml:"SingularTable"` // 是否使用单数表名(默认复数),启用后,User结构体表将是user
TablePrefix string `json:"" yaml:"TablePrefix"` // 表前缀
MaxOpenConns int `json:"" yaml:"MaxOpenConns"`
MaxIdleConns int `json:"" yaml:"MaxIdleConns"`
ConnMaxLifetime int `json:"" yaml:"ConnMaxLifetime"`
}