当前位置: 首页 > wzjs >正文

优秀网页 网站衡水淘宝的网站建设

优秀网页 网站,衡水淘宝的网站建设,百度seo指数查询,c 网站开发工程师招聘Blogx项目配置文件读取流程详解 下面按照“程序启动 → 拿到文件名 → 读取文件 → 反序列化 → 交给业务”的顺序,把这套“小而完整”的配置加载链路拆开讲。全程只用到 4 个核心包: flag(读命令行)、os(读文件&…

Blogx项目配置文件读取流程详解

下面按照“程序启动 → 拿到文件名 → 读取文件 → 反序列化 → 交给业务”的顺序,把这套“小而完整”的配置加载链路拆开讲。全程只用到 4 个核心包:
flag(读命令行)、os(读文件)、yaml.v2(解析 YAML)、conf(保存结构体)。

────────────────────────

  1. CLI 阶段:确定“要读哪一个 YAML 文件”
  1. flags.Parse() 里注册了一个 -f 选项,默认值 "settings.yaml"
  2. 当你运行可执行文件时:
    myapp → 使用默认文件 settings.yaml
    myapp -f prod.yaml → 使用 prod.yaml
  3. 解析完成后,路径被写进 flags.Flagoptions.File 这个变量,供后续任何包读取。

等于是给了程序一个“可替换的配置文件入口”。

────────────────────────
2. I/O 阶段:一次性把文件内容读进内存

入口函数是 core.ReadConf()(见 core/init_conf.go)。

byteData, err := os.ReadFile(flags.Flagoptions.File)

os.ReadFile 会把整个 YAML 文件全部读入内存,返回 []byte
• 如果文件不存在或权限不够,err != nil,代码选择 panic(err) —— 直接让程序崩掉,防止带着空配置继续跑。

此时 byteData 就是一段原始的 YAML 文本,如:

system:ip:port: 8080env: dev
log:app: blogx_serverdir: logs

────────────────────────
3. 反序列化阶段:YAML → Go 结构体

c := new(conf.Config)            // 根据 conf/enter.go 里的定义创建空骨架
err = yaml.Unmarshal(byteData, c)

关键点:

  1. conf.Config 结构体长这样

    type Config struct {System System `yaml:"system"`Log    Log    `yaml:"log"`
    }
    

    里面再嵌套 SystemLog 两个子结构体,每个字段都有 yaml:"xxx" tag。

  2. yaml.Unmarshal 读取文本时,会把根节点 system: 对应灌入 Config.Systemlog: 对应灌入 Config.Log
    port: 8080c.System.Port = "8080"(注意 YAML 数字会以字符串方式存进去,因为字段类型是 string)
    dir: logsc.Log.Dir = "logs"

  3. YAML 里出现但结构体里没有的字段(如 env:)会被忽略;结构体里有字段但 YAML 没写值的(如 ip: 空白)会保持零值 ""

如果 YAML 格式写错(比如缩进错误),yaml.Unmarshal 会返回错,代码同样 panic 终止。

────────────────────────
4. 结果返回:业务代码随拿随用

ReadConf() 最后一行 return 把填好的指针 *conf.Config 交出去,并打印一句提示:

fmt.Printf("读取配置文件%s成功\n", flags.Flagoptions.File)

主流程中通常这么调用:

cfg := core.ReadConf()fmt.Println(cfg.System.Port) // "8080"
fmt.Println(cfg.Log.Dir)     // "logs"

到这里,配置文件的内容已经变成了普通 Go 变量,后续任何包只要拿到 cfg 就能读取,而不必自己解析 YAML。

────────────────────────
5. 小结 & 优点

可替换:想切换环境(dev / prod)只需 -f 指向另一份 YAML。
类型安全:一旦进了结构体,各字段就是强类型,IDE 有补全、编译器能检查。
集中管理:所有配置模型都在 conf 目录,业务逻辑完全不关心 YAML 格式细节。
失败即停:任何一步失败(文件读不到、YAML 格式错)都会 panic,防止应用带错误配置启动。

整个链路就像“加油—>过滤—>入缸”三步: CLI 提供“油箱口”(-f),os.ReadFile 把油加进来(字节),yaml.Unmarshal 过滤成干净的汽油(结构体),最后送进引擎(业务代码)。

总结

1.终端输入go run main.go ,程序启动,调用flag.Parse(),flag 包会去解析用户在命令行输入的内容,默认读取settings.yaml文件
2.进入core.ReadConf()函数,读取配置文件到bytedata,此时bytedata里存储的是原始的text文本信息
3.反序列化,把YAML → Go 结构体,然后 return 把填好的指针 *conf.Config 交出去,赋值为global.Config


文章转载自:

http://G34FIN55.zmwzg.cn
http://CjoTpM0D.zmwzg.cn
http://vHxElZJK.zmwzg.cn
http://kdoPuVL3.zmwzg.cn
http://lJvHdeQn.zmwzg.cn
http://xP76xCla.zmwzg.cn
http://ooQxpGrG.zmwzg.cn
http://vsUjYk1i.zmwzg.cn
http://HX0OrSyr.zmwzg.cn
http://258eqw2E.zmwzg.cn
http://laITzwYc.zmwzg.cn
http://m4rii5sU.zmwzg.cn
http://PCKwMZaF.zmwzg.cn
http://WBqAZEHq.zmwzg.cn
http://1kRx5jAN.zmwzg.cn
http://jtlBxvAK.zmwzg.cn
http://FKLKEZwx.zmwzg.cn
http://OrdmxYlG.zmwzg.cn
http://036LeYDK.zmwzg.cn
http://JAL24IUr.zmwzg.cn
http://0a7KIJiz.zmwzg.cn
http://9CRfauLs.zmwzg.cn
http://hkexO6sA.zmwzg.cn
http://MM8dDv9F.zmwzg.cn
http://pCbxxEJC.zmwzg.cn
http://5WMmHKiv.zmwzg.cn
http://Ur5a3gdH.zmwzg.cn
http://9Y7J6Yae.zmwzg.cn
http://wvtypyTY.zmwzg.cn
http://x4961UW6.zmwzg.cn
http://www.dtcms.com/wzjs/651218.html

相关文章:

  • 免费房屋建设图纸网站有哪些中国万网首页
  • 正规的手机网站建设怎么更换网站模板
  • 未来网站建设想法私域视频
  • 龙潭湖网站建设柬埔寨旅游网站建设
  • 课程网站建设方案可口可乐网站建设策划方案
  • 网站建设ktv适合新手的网站开发
  • 哪个网站做新中式免费seo快速排名工具
  • 动漫网站建设意义做液氮冰淇淋店网站
  • 濮阳市网站怎么做宣传wordpress 新浪微博关注
  • 重庆城乡建设信息网官网乐清手机网站优化推广
  • 成都市住房和城乡建设厅网站软件库破解版软件合集
  • 企业网络管理 网站开发与运营注册公司有什么条件
  • 做婚庆网站的功能定位做视频网站服务器怎么选择
  • 聊城市公司网站建站网站推广的四个阶段包括
  • 完成网站集约化建设哈尔滨网站设计公司
  • 工程建设质量安全管理协会网站wordpress自带下载插件
  • 北京网站建设推广服烤肉自助餐网站建设
  • 有几家做网站的公司好响应式网站宽度
  • 网站通知发送邮件微博如何做的跟网站一样
  • 网站建设授权书wordpress名站
  • sns社交网站邯郸企业做网站方案
  • 广州品牌网站设计建设深圳鸿运通网站建设
  • 创建网站的步骤网站建设客户需求分析调查表
  • 网站建设 工具百度收录文章
  • 阿里巴巴网站建设方案书拉新奖励的app排行
  • 眉县做网站网站排名规则
  • 服装公司 网站怎么做千川广告投放平台
  • 云南住房和城乡建设部网站ps切片工具做网站
  • 自己做彩票网站简单吗麓谷做网站的公司
  • 免费推广自己的网站前端开发入门薪水