您的位置:首页 > 健康 > 美食 > 产品免费推广平台有哪些_北京高端网站建设系统_黑龙江新闻_大连seo按天付费

产品免费推广平台有哪些_北京高端网站建设系统_黑龙江新闻_大连seo按天付费

2025/2/27 9:36:15 来源:https://blog.csdn.net/weixin_42073635/article/details/144714935  浏览:    关键词:产品免费推广平台有哪些_北京高端网站建设系统_黑龙江新闻_大连seo按天付费
产品免费推广平台有哪些_北京高端网站建设系统_黑龙江新闻_大连seo按天付费

原文地址:golang实现yaml配置文件的解析 – 无敌牛

欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等

代码

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

配置文件 conf.yaml

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

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

module readyaml

主程序 readyaml.go

package mainimport ("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 的成员变量需要大写开头。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com