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 或结构体解码。读取字符串不会自动建立文件监听。

参考资料#

第 5 篇,共 9 篇本文属于系列

Viper 学习(5):读取字符串中的配置
https://shirone.mysqil.com/posts/viper/05-string-config/
作者
HikariTish
发布于
2026-10-06
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取