当前位置: 代码网 > it编程>前端脚本>Golang > Golang实现yaml配置文件的解析

Golang实现yaml配置文件的解析

2025年02月14日 Golang 我要评论
代码需要建立3个文件,目录结构如下:配置文件 conf.yamlredis: host: "127.0.0.1" port: 6379 db: 11 pass: "aaaaaa" go

代码

需要建立3个文件,目录结构如下:

配置文件 conf.yaml

redis:  
  host: "127.0.0.1"
  port: 6379
  db: 11  
  pass: "aaaaaa" 

go模块文件 go.mod,用于管理项目的依赖关系和版本信息。

module readyaml

主程序 readyaml.go

package main
 
import (
    "github.com/spf13/viper"
    "fmt"
)
 
// 配置文件
type conf struct {
    redis redisconfig      `mapstructure:"redis"`
}
 
// redis配置数据
type redisconfig struct{
    host    string    `mapstructure:"host"`
    port    int       `mapstructure:"port"`
    db      int       `mapstructure:"db"`
    pass    string    `mapstructure:"pass"`
}
 
func getconf() conf{
    var cfg conf 
 
    // 设置待读取配置文件的名字
    viper.setconfigname("conf")
    // 设置待读取配置文件的格式
    viper.setconfigtype("yaml")
    // 添加配置文件的检索路径
    viper.addconfigpath(".")
 
    // 读取数据
    if err := viper.readinconfig(); err != nil {
        fmt.printf("readinconfig error : %s\n", err)
        return cfg
    }
 
    // 测试 1 : 直接获取数据
    fmt.printf("host %s\n", viper.getstring("redis.host"))
    fmt.printf("port %d\n", viper.getint("redis.port"))
    fmt.printf("db %d\n", viper.getint("redis.db"))
    fmt.printf("pass %s\n", viper.getstring("redis.pass"))
 
    // 通过viper模块,反序列化成对象
    if err := viper.unmarshal(&cfg); err != nil {
        fmt.printf("unmarshal error : %s\n", err)
        return cfg
    }
 
    return cfg 
}
 
var cfg conf = getconf()
 
func main() {
    // 打印测试
    fmt.printf("host %s, port %d, db %d, pass %s len(pass) %d\n", cfg.redis.host, cfg.redis.port, cfg.redis.db, cfg.redis.pass, len(cfg.redis.pass) )
}

首先,需要整理和更新项目的依赖关系

go mod tidy

这个过程中,会下载缺失的模块。go.mod文件会进行更新,并且多出一个go.sum文件,用于记录项目依赖树中所有模块的特定版本内容的预期哈希值。

在这个过程中,如果无法联网,或者无法访问源,则会报错如下图。如果没有报错,则可以直接执行第二步。

可以使用国内go代理解决这个问题,此处用到goproxy环境变量。

执行 export goproxy=https://goproxy.cn,然后继续执行 go mod tidy

也可以在 /etc/bashrc或者~/.bashrc文件添加这个命令,这样每次登录会话会自动添加此环境变量。

第二步,直接执行脚本: go run readyaml.go ;

也可以编译后再执行二进制文件: go build readyaml.go,编译后,创建了编译后的文件 readyaml。

直接执行 ./readyaml。具体操作,如下图所示:

避坑:定义的数据结构成员变量必须是大写字母开头,不然 viper.unmarshal 这一步可能映射不成功。这是由于在golang中,以小写字母开头定义的标识符(如变量名、函数名、类型名等)只能在本包内访问,是不能跨包访问的。

也就是:type redisconfig struct 和 type conf struct 的成员变量需要大写开头。

以上就是golang实现yaml配置文件的解析的详细内容,更多关于golang解析yaml文件的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com