# gozero-Learn **Repository Path**: jfssnail/gozero-learn ## Basic Information - **Project Name**: gozero-Learn - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-25 - **Last Updated**: 2026-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [Go Zero 教程](https://www.bilibili.com/video/BV1vRxzefExM) * `golang`: 安装最新稳定版 go1.24.11 版本 * `goctl`: go-zero框架的内置脚手架,可以一键生成代码、文档、部署 k8s.ymal、Dockerfile 等 * `protoc` + `protobuf`: 是一种数据序列化和反序列化标准,谷歌出品,和 json,xml 类似,性能非常高 + `protoc`: 命令是 protobuf 的编译器,将 `.proto` 后缀的文件编译成 对应的开发语言文件 + `protoc-gen-go`: 是 protoc 的一个插件,用于生成 go 语言代码(protoc原生不支持生成go语言文件) + `protoc-gen-go-grpc`: 是 protoc 的 go 语言种的 grpc 插件,可以生成 grpc 相关的 go 语言文件。 ```bash # 1. goctl 安装 go install github.com/zeromicro/go-zero/tools/goctl@latest goctl --version # 2. protoc 及 Go 插件安装 https://github.com/protocolbuffers/protobuf/releases/download/v33.2/protoc-33.2-win64.zip protoc --version go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest # 也可以快捷安装 goctl env check --install --verbose --force mkdir gozero-learn ``` ## 快速入门 ```bash goctl api new hello cd hello go mod tidy go run hello.go # 修改 api 文件,重新生成 go 代码 goctl api go --api hello.api --dir . ``` ## 登录注册 * user.api ```protoc syntax = "v1" type RegisterReq { //代表可以接受json参数,并且是必填参数,注意 go-zero 不支持多 tag Username string `path:"username"` Password string `path:"password"` } type RegisterResp {} type LoginReq { Username string `json:"username"` Password string `json:"password"` } type LoginResp { Token string `json:"token"` } @server ( //代表当前service代码会放在account目录下 group: account //路由前缀 prefix: v1 ) // 影响配置文件名称和主文件名称 service user-api { //handler中的函数名称 @handler register post /user/register (RegisterReq) returns (RegisterResp) @handler login post /user/login (LoginReq) returns (LoginResp) } ``` ```bash mkdir user-api cd user-api vi user.api goctl api go --api user.api --dir . go mod tidy # 使用 goctl model 命令生成代码 go get github.com/go-sql-driver/mysql@latest cd internal mkdir model cd model vi user.sql goctl model mysql ddl --src user.sql --dir . # 使用 jwt 生成令牌 go get github.com/golang-jwt/jwt/v5@latest vi user.api goctl api go --api user.api --dir . ``` ## gRPC 案例 ```bash # 1. 生成 proto 文件 goctl rpc -o greet.proto # 2. 生成 gRPC 服务端 goctl rpc protoc greet.proto --go_out=./grpc-server --go-grpc_out=./grpc-server --zrpc_out=./grpc-server # 3. 拉取依赖 cd grpc-server go mod tidy # 4. 编写代码逻辑 # 5. 修改配置文件(去掉 etcd 配置,采用直连模式) # 6. 启动服务 go run greet.go # 7. 安装 grpcurl 工具 https://github.com/fullstorydev/grpcurl/releases/download/v1.9.3/grpcurl_1.9.3_windows_x86_64.zip # 8. 使用 grpcurl 测试 # 获取 grpc 服务列表 grpcurl -plaintext localhost:8080 list # 获取 grpc 服务方法 grpcurl -plaintext localhost:8080 list greet.Greet # 获取 grpc 服务详情 grpcurl -plaintext localhost:8080 describe grpcurl -plaintext localhost:8080 describe greet.Greet # 获取 grpc 服务类型 grpcurl -plaintext localhost:8080 describe greet.Request # 调用 grpc 方法 grpcurl -d '{\"ping\":\"ping\"}' -plaintext localhost:8080 greet.Greet/Ping # Windows CMD 客户端流式输入(ctrl+z 结束) grpcurl -plaintext -d @ localhost:8080 greet.Greet/Ping {"ping":"ping"} ``` * `go_out`: proto生成的go代码所在的目录,proto本身的命令参数 * `go-grpc_out`: proto生成的grpc代码所在目录,proto本身的命令参数,和 `go_out` 必须同一个目录 * `zrpc_out`: `goctl rpc` 自带命令,`go-zero` 生成的代码所在目录 ## gRPC 客户端案例 ```bash mkdir grpc-client cd grpc-client go mod init vi client.go go mod tidy go run client.go # 配置工作目录 cd .. go work use .\grpc-client\ go work use .\grpc-server\ go work use .\hello\ go work use .\user-api\ rm -rf ./grpc-client/greet vi ./grpc-client/client.go go run client.go ``` ## 使用 ETCD ```bash Etcd: Hosts: - 127.0.0.1:2379 Key: greet.rpc ``` ## 中间件 * 鉴权管理中间件 AuthorizeHandler * 熔断中间件 BreakerHandler * 内容安全中间件 ContentSecurityHandler * 解密中间件 CryptionHandler * 压缩管理中间件 GunzipHandler * 日志中间件 LogHandler * ContentLength 管理中间件 MaxBytesHandler * 限流中间件 MaxConnsHandler * 指标统计中间件 MetricHandler * 普罗米修斯指标中间件 PrometheusHandler * panic 恢复中间件 RecoverHandler * 负载监控中间件 SheddingHandler * 超时中间件 TimeoutHandler * 链路追踪中间件 TraceHandler ## Etcd 配置中心