391 字
2 分钟
Viper 学习(5):读取字符串中的配置
读取字符串中的配置
使用 ReadConfig 从字符串读取 YAML、TOML 和 JSON 配置。
本系列使用 Viper v1.21.0。每章都是独立实验,示例命令在项目目录中执行;开始新一章时,使用该章的完整程序和配置,不累积上一章的临时修改。
尚未准备练习项目时,先完成第 1 章的项目准备。
本章不需要磁盘配置文件,完整初始内容直接放在程序字符串中。
初始示例
初始完整 main.go:
package main
import ( "fmt" "github.com/spf13/viper" "log" "strings")
func main() { content := `app: name: viper-demo port: 8080` v := viper.New() v.SetConfigType("yaml") if err := v.ReadConfig(strings.NewReader(content)); err != nil { log.Fatal(err) }
fmt.Println("应用名称:", v.GetString("app.name")) fmt.Println("监听端口:", v.GetInt("app.port"))}执行 go run main.go,预期名称为 viper-demo、端口为 8080。
strings.NewReader 把字符串包装成 io.Reader,ReadConfig 从这个数据源读取。字符串没有扩展名,因此通过 SetConfigType 明确格式。
第一次修改
将完整的 content 声明替换为:
content := `[app]name = "viper-demo"port = 9090`同时将格式设置替换为:
v.SetConfigType("toml")其余代码不变,再次运行,预期端口为 9090。
第二次修改
将 content 声明替换为:
content := `{"app":{"name":"viper-demo","port":7070}}`同时将格式设置替换为:
v.SetConfigType("json")再次运行,预期端口为 7070。
ReadInConfig 根据路径读取文件,ReadConfig 从传入的数据源读取内容。读入后都能使用 Getter 或结构体解码。读取字符串不会自动建立文件监听。
参考资料
Viper 学习记录
已完结Viper 学习(5):读取字符串中的配置
https://shirone.mysqil.com/posts/viper/05-string-config/分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 9 天
部分内容可能已过时