【web3基础】go-zero创建rpc服务,创建配置文件(二)

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 微服务框架的核心使用流程:

  1. RPC 项目创建与运行 :使用 goctl rpc new 命令创建 RPC 服务,通过 go mod tidy 加载依赖,运行过程中遇到 etcd 配置问题并提供了临时解决方案。

  2. 配置文件解析机制 :创建 API 服务项目,展示如何定义和解析 YAML 配置文件,通过 conf.MustLoad 将配置映射到 Go 结构体,并验证配置加载效果。

文章最后揭示了 go-zero 配置加载的本质:利用 YAML 反序列化机制,将配置文件内容映射到 Go struct,实现配置和代码解耦。这两个示例涵盖了从项目创建、依赖管理、配置解析到服务运行的全流程,为初学者提供了完整的实践参考。

相关推荐
第九序言T7 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
徐征6398 小时前
邮件安全防护体系技术拆解:从入口过滤到大模型研判的检测流水线 北京方向标
web3·生活
龙亘川8 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人9 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas1009 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真10 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy111 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
呆呆虫1211 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心疼你的一切11 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Wang's Blog12 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友