go-zero
关键词: go-zero, goctl, RPC, 配置文件, YAML, 配置解析, 微服务, 项目创建, 依赖管理, 配置加载
本文一览图

下面是实际操作:
创建rpc项目
创建命令:
go
goctl rpc new rpcdemo
运行项目:

加载依赖包
go
root@DESKTOP-TKVSD8M:~/go-zero-learn# cd rpcdemo/
root@DESKTOP-TKVSD8M:~/go-zero-learn/rpcdemo# go mod tidy
运行demo
go
root@DESKTOP-TKVSD8M:~/go-zero-learn/rpcdemo# go run rpcdemo.go

卡卡报错,原因,没有配置etcd,因为还没讲到那块,所以,先注释掉,跑通项目。
2处改动1:
-
etc下的yaml

-
logic返回先写死

配置文件解析原理了解
- 新建个服务项目
go
goctl api new configdemo
cd configdemo && go mod tidy
- 新增个配置文件

config.yaml 内容如下:
go
Name: demo
Host: 127.0.0.1
Port: 6370
- 新增解析方法

main.go 内容如下:
go
package main
import (
"flag"
"fmt"
"github.com/zeromicro/go-zero/core/conf"
)
type Config struct {
Name string
Host string `json:",default=0.0.0.0"`
Port int
}
var f = flag.String("f", "config.yaml", "the config file")
func main() {
flag.Parse()
var c Config
conf.MustLoad(*f, &c)
fmt.Println(c.Name)
}
运行:
go
root@DESKTOP-TKVSD8M:~/go-zero-learn/configdemo# go run main.go
demo
改下name:
go
Name: config demo
Host: 127.0.0.1
Port: 6370
再次运行:
go
root@DESKTOP-TKVSD8M:~/go-zero-learn/configdemo# go run main.go
config demo
本质上的原理都一样,都是解析config,只不过 入口文件的配置文件默认放在etc中的。
go
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package main
import (
"flag"
"fmt"
"configdemo/internal/config"
"configdemo/internal/handler"
"configdemo/internal/svc"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/rest"
)
var configFile = flag.String("f", "etc/configdemo-api.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
server := rest.MustNewServer(c.RestConf)
defer server.Stop()
ctx := svc.NewServiceContext(c)
handler.RegisterHandlers(server, ctx)
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
server.Start()
}
本质:
go-zero 配置加载本质是利用 YAML 反序列化机制,将配置文件内容映射到 Go struct,实现配置和代码解耦。
总结
本文通过两个完整示例演示了 go-zero 微服务框架的核心使用流程:
-
RPC 项目创建与运行 :使用
goctl rpc new命令创建 RPC 服务,通过go mod tidy加载依赖,运行过程中遇到 etcd 配置问题并提供了临时解决方案。 -
配置文件解析机制 :创建 API 服务项目,展示如何定义和解析 YAML 配置文件,通过
conf.MustLoad将配置映射到 Go 结构体,并验证配置加载效果。
文章最后揭示了 go-zero 配置加载的本质:利用 YAML 反序列化机制,将配置文件内容映射到 Go struct,实现配置和代码解耦。这两个示例涵盖了从项目创建、依赖管理、配置解析到服务运行的全流程,为初学者提供了完整的实践参考。