Linux下Go-Zero微服务框架安装流程

① 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
全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下 HR 会来跟你谈。” 我当时脑子直接宕机,一句话都没憋出来。后面 HR 找我谈话,直属领导也在旁边。HR 说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务