① Linux下Go-Zero微服务框架安装流程
1.配置 Gomodule 和 Goproxy
$ go env -w GO111MODULE="on"
$ go env -w GOPROXY=https://goproxy.cn
2.1Goctl安装
//下载并安装
GOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest
//环境变量检测
go get下载编译后的二进制文件位于$GOPATH/bin目录下,要确保$GOPATH/bin已经添加到环境变量。
$ sudo vim /etc/paths
在最后一行添加如下内容
$GOPATH/bin
//验证安装成功
$ goctl -v
2.2Goctl IDEA安装
//找到 goland 插件 Goctl 并安装
3.Protoc安装
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protobuf-all-3.20.0.zip
$ unzip protoc-all-3.20.0.zip
$ cd protobuf-all-3.20.0
$ ./configure
$ make
$ make install
$ protoc --version
PS:异常情况
protoc --version => no such file or directory
在命令行执行:sudo ldconfig
4.再装protoc-gen-go(protoc-gen-go是protoc编译插件的Go版本)
$ go get github.com/golang/protobuf
$ cd github.com/golang/protobuf/protoc-gen-go
$ go build .
5.将protoc-gen-go文件放入gopath/bin/目录下
6.编写hello.proto测试插件安装是否成功
syntax = "proto3";
option go_package="./;protofile";
package protofile;
message Hello {
string name = 1;
int32 age = 2;
string addr = 3;
}
$ protoc --go_out=./ hello.proto //针对rpc生成go文件
$ protoc --go_out=plugins=grpc:. hello.proto //针对grpc生成go文件
7.Goctl详细使用
COMMANDS:
bug 反映 goctl 出现了什么bug
upgrade 升级 goctl
env 查看 goctl 环境信息
migrate migrate from tal-tech to zeromicro
api 生成 api 文件 //常用
docker 生成 docker 文件
kube 生成 k8s yaml 文件
rpc 生成 rpc 代码 //常用
model 根据数据库的表生成模型代码 //常用
template 自定义模板
② Linux下Go-Zero微服务框架启动流程
1.初始化项目
$ go mod init zero-demo
2.1创建api文件
$ mkdir user-api
$ cd user-api
$ mkdir api
$ touch user.api
syntax = "v1" //api语法版本
info(
author: "user-api"
date: "2022-03-26"
desc: "api语法示例及语法说明"
)
type UserInfoRequest {
UserId int64 `json:"userId"`
}
type UserInfoResponse {
UserId int64 `json:"userId"`
Nickname string `json:"nickname"`
}
service user-api{
@doc "获取用户信息"
@handler userInfo
post /user/info (UserInfoRequest) returns (UserInfoResponse)
}
2.2生成api文件
$ cd zero-demo/user-api/api
$ goctl api go -api *.api -dir ../ --style=goZero
//生成命令说明
dir 代码输出目录
--api 指定api源文件
--style 指定生成代码文件的文件名称风格,详情见文件名称命名style说明
$ cd zero-demo
$ tree
.
├── go.mod
└── user-api
├── api
│ └── user.api
├── etc
│ └── user-api.yaml
├── internal
│ ├── config
│ │ └── config.go
│ ├── handler
│ │ ├── routes.go
│ │ └── userInfoHandler.go
│ ├── logic
│ │ └── userInfoLogic.go
│ ├── svc
│ │ └── serviceContext.go
│ └── types
│ └── types.go
└── user.go
2.3下载相关依赖文件
$ go mod tidy
3.1生成 Dockerfile 文件
$ cd zero-demo/user-api
$ goctl docker --go user.go
会生成Dockerfile文件
zero-demo/user-api/Dockerfile
3.2生成 K8s 文件
$ cd go-zero/zero-demo/user-api
$ goctl kube deploy -name user-api -namespace go-zero-looklook -image user-api:v1.0 -o user-api.yml -port 1001 -nodePort 31001
会生成配置文件
zero-demo/user-api/user-api.yml
4.1创建proto文件
$ mkdir user-rpc
$ cd user-rpc
$ mkdir pbfile
$ touch user.proto
4.2生成rpc/grpc文件
$ cd zero-demo/user-rpc/pbfile
$ goctl rpc protoc *.proto --go_out=../ --go-grpc_out=../ --zrpc_out=../ --style=goZero
$ cd zero-demo
$ tree
.
├── go.mod
├── go.sum
├── user-api
...
└── user-rpc
├── etc
│ └── user.yaml
├── internal
│ ├── config
│ │ └── config.go
│ ├── logic
│ │ └── getUserInfoLogic.go
│ ├── server
│ │ └── usercenterServer.go
│ └── svc
│ └── serviceContext.go
├── pb
│ ├── user_grpc.pb.go
│ ├── user.pb.go
│ └── user.proto
├── usercenter
│ └── usercenter.go
└── user.go
4.3再次下载相关依赖文件
$ go mod tidy
5.1创建model文件
$ mkdir model
$ cd model
$ touch user.sql
CREATE DATABASE ZeroDemo;
USE ZeroDemo;
CREATE TABLE `user`
(
`id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
`username` varchar(255) NOT NULL UNIQUE COMMENT 'username',
`password` varchar(255) NOT NULL COMMENT 'password',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
5.2生成model文件
$ cd zero-demp/model
$ goctl model mysql ddl -c -src user.sql -dir . //会生成操作数据库的 CRDU 的代码
$ tree
.
├── go.mod
├── go.sum
├── model
│ ├── usermodel_gen.go
│ ├── usermodel.go
│ ├── user.sql
│ └── vars.go
├── user-api
...
└── user-rpc
...
5.3再次下载相关依赖文件
$ go mod tidy