关键词:
【中文标题】如何读取 YAML 文件【英文标题】:How to read a YAML file 【发布时间】:2015-09-05 23:47:11 【问题描述】:我在读取 YAML 文件时遇到问题。我认为这是文件结构中的一些东西,但我不知道是什么。
YAML 文件:
conf:
hits:5
time:5000000
代码:
type conf struct
hits int64 `yaml:"hits"`
time int64 `yaml:"time"`
func (c *conf) getConf() *conf
yamlFile, err := ioutil.ReadFile("conf.yaml")
if err != nil
log.Printf("yamlFile.Get err #%v ", err)
err = yaml.Unmarshal(yamlFile, c)
if err != nil
log.Fatalf("Unmarshal: %v", err)
return c
【问题讨论】:
您看到的错误是什么? @AmitKumarGupta 我没有收到任何错误,只是空结构 您认为这可能与您的问题相关吗?另外,您可以粘贴重现问题的完整代码吗?package main
,您正在导入什么文件,main
函数等,以便人们可以轻松地帮助您复制粘贴代码并在本地运行它。考虑添加便于人们帮助您的信息和代码,因为您希望人们帮助您。
如前所述,任何通过反射(JSON、XML、YAML 解组等)设置字段的东西都只能在导出的字段上工作。
【参考方案1】:
你的 yaml 文件必须是
hits: 5
time: 5000000
您的代码应如下所示:
package main
import (
"fmt"
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
)
type conf struct
Hits int64 `yaml:"hits"`
Time int64 `yaml:"time"`
func (c *conf) getConf() *conf
yamlFile, err := ioutil.ReadFile("conf.yaml")
if err != nil
log.Printf("yamlFile.Get err #%v ", err)
err = yaml.Unmarshal(yamlFile, c)
if err != nil
log.Fatalf("Unmarshal: %v", err)
return c
func main()
var c conf
c.getConf()
fmt.Println(c)
主要错误是结构的大写字母。
【讨论】:
导出标识符的规范:golang.org/doc/go_spec.html#Exported_identifiers 这对我不起作用。我需要将err = yaml.Unmarshal(yamlFile, c)
行更改为err = yaml.Unmarshal(yamlFile, &c)
,即传递指针而不是值。我不知道为什么。
它通过类型 conf 结构绑定到代码。如果配置文件更改,将无法重用。有没有什么是动态的,无需在代码中定义结构?
@joelfischerr 你说得对,我必须做出同样的改变才能正常工作。
@MopparthyRavindranath 我认为您需要使用接口来执行此操作,但为什么配置文件会更改多次?【参考方案2】:
使用升级后的 第 3 版 yaml 包。
conf.yaml
文件示例:
conf:
hits: 5
time: 5000000
camelCase: sometext
main.go
文件:
package main
import (
"fmt"
"io/ioutil"
"log"
"gopkg.in/yaml.v3"
)
type myData struct
Conf struct
Hits int64
Time int64
CamelCase string `yaml:"camelCase"`
func readConf(filename string) (*myData, error)
buf, err := ioutil.ReadFile(filename)
if err != nil
return nil, err
c := &myData
err = yaml.Unmarshal(buf, c)
if err != nil
return nil, fmt.Errorf("in file %q: %v", filename, err)
return c, nil
func main()
c, err := readConf("conf.yaml")
if err != nil
log.Fatal(err)
fmt.Printf("%v", c)
运行说明(如果这是您第一次退出标准库):
go mod init example.com/whatever
go get gopkg.in/yaml.v3
cat go.sum
go run .
标签(如 yaml:"field"
)对于任何全小写的 yaml 密钥标识符都是可选的。对于节目,我已经包含了一个用于 camelCase 标识符的节目。
(令人困惑的是,“yaml”的这种小写行为在标准“json”包中没有。如果您的结构同时用于 JSON 和 YAML 编码,最好在几乎每个领域。冗长,但减少错误。)
【讨论】:
【参考方案3】:package main
import (
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
)
type someConf struct
AccessKeyID string `yaml:"access_key_id"`
//...
func getConf(file string, cnf interface) error
yamlFile, err := ioutil.ReadFile(file)
if err == nil
err = yaml.Unmarshal(yamlFile, cnf)
return err
func main()
cfg := &awsConf
if err := getConf("conf.yml", cfg); err != nil
log.Panicln(err)
有史以来最短的 getConf
【讨论】:
如何在 java 中读取 YAML 文件?
】如何在java中读取YAML文件?【英文标题】:HowtoreadfromYAMLfileinjava?【发布时间】:2020-11-0908:40:45【问题描述】:我有这样的YAML文件..Product:ProductA:Suite:SuiteName_A:Environment_1:["A","B","C"]Environment_2:["X","Y","Z"]SuiteName_B:Environment_1:["E","F 查看详情
如何将 YAML 文件解析/读取到 Python 对象中?
】如何将YAML文件解析/读取到Python对象中?【英文标题】:Howtoparse/readaYAMLfileintoaPythonobject?【发布时间】:2011-10-1513:07:48【问题描述】:例如,这个YAML:Person:name:XYZ到这个Python类:classPerson(yaml.YAMLObject):yaml_tag=\'Person\'def__init__(sel... 查看详情
如何从 python 中的嵌套 YAML 文件中读取数据?
】如何从python中的嵌套YAML文件中读取数据?【英文标题】:HowtoreaddatafromnestedYAMLfileinpython?【发布时间】:2020-07-0513:56:24【问题描述】:我有例如swagger.yaml文件,我想从中读取一些变量。例如那个文件:https://editor.swagger.io/下面... 查看详情
python——yaml
...amlRead_yaml.py※问题:1.含有多个文件的yaml文件,读取出来如何选择?2.持续写入能否将新写入的文件变成新的文件结构?※PS:觉得这篇文章有用的朋友,多多点赞打赏哦~! 查看详情
如何从 electron-builder yaml 配置文件中的 .env 文件中读取?
】如何从electron-builderyaml配置文件中的.env文件中读取?【英文标题】:Howtoreadfrom.envfileinelectron-builderyamlconfigfile?【发布时间】:2020-11-1001:01:45【问题描述】:我是电子新手。我有一个用电子包裹的角度应用程序,我想使用electron-... 查看详情
读取python的yaml配置文件(代码片段)
...是Sqlite还是Postgres的操作,然后会引发异常,但我不知道如何。我尝试了但失败了,我在做什么错?我的test.yaml文件:db:mysqldbopt:host:zppp8alnTQc6jpfb.cds6ifjzc2el.ap-northeast-1.rds.amazonaws.comp 查看详情
如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容
】如何使用PipelineUtilitySteps插件更新现有yaml文件的内容【英文标题】:HowtoupdatethecontentofanexistingyamlfilewithPipelineUtilityStepsplugin【发布时间】:2019-10-2801:13:18【问题描述】:在我的jenkins管道中,我正在使用PipelineUtilitySteps插件读取... 查看详情
如何在 OpenCV 中编辑/更新 YAML 文件?
】如何在OpenCV中编辑/更新YAML文件?【英文标题】:Howtoedit/updateYAMLfileinOpenCV?【发布时间】:2012-07-0823:16:57【问题描述】:在OpenCV中编辑/更新YAML/YML文件的最佳方法是什么?【问题讨论】:使用YAML库?我觉得yaml-cpp还不错。如何... 查看详情
如何在 azure devops 中解析 yaml 文件
】如何在azuredevops中解析yaml文件【英文标题】:Howtopossibleparseyamlfileinazuredevops【发布时间】:2021-12-3103:40:09【问题描述】:如何解析yaml文件以从中提取appVersion?我可以将文件内容与文件内容一起读取到变量中以获取所有内容但... 查看详情
yaml文件使用
参考技术AYAML入门教程参考:python读取yaml文件Python常用配置文件ini、json、yaml读写总结读取yaml文件(数组用下标[x],字典用[key])编写一个py文件,读取yaml文件,yaml文件需要通过safe_load方法转换成字典格式,然后再通过字典取值的... 查看详情
python读取yaml文件
简介在实际开发过程中,我们可能需要读取一些配置文件的配置信息,例如ini、yaml、property等格式,本文将讲述怎么去获取和设置yaml文件的相关参数。示例yaml文件test1:test2-1:5test2-2:130000test2-3:test3-1:123test 查看详情
从yaml文件读取配置,然后修改配置,怎样更新到yaml文件
参考技术Ajava可以通过引入依赖:<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId></dependency>通过创建yaml对象:Yamlyaml=newYaml();通过yaml.loadAs方法读取配置,修改之后通过yaml.dump方法去更新文件 查看详情
Golang YAML 使用地图读取
...aml.v1包来阅读这个更扁平的版本,但我一直在试图弄清楚如何在这个YAM 查看详情
数据驱动-yaml文件读取
数据驱动YAML文件类型Ⅰ#最外层定义了两个列表,yaml文件在被读取的时候,user和msg会被遍历,输出两个字典-user: username:admin password:\'123456\'msg:success-user: username:admin passwo 查看详情
用Javascript从YAML文件中读取[重复]
】用Javascript从YAML文件中读取[重复]【英文标题】:ReadingfromYAMLFileinJavascript[duplicate]【发布时间】:2012-11-2622:42:44【问题描述】:我正在尝试将YAML文件中的参数读入Javascript。有什么好的图书馆可以做到这一点吗?我试过这些库:... 查看详情
yaml配置注入(代码片段)
...erson类:2.yaml文件内容:3.出现提示:4.测试加载指定配置文件读取其他文件(yaml)1.新建配置文件2.加载配置文件(student类)读取其他文件(properties)1.新建配置文件2.加载配置文件(student类)读取其他文 查看详情
c#开发的openra的yaml文件读取和分析
C#开发的OpenRA的yaml文件读取和分析在前面已经看到OpenRA所有资源管理,都是来源于mod.yaml文件。说明了这个文件是一个资源描述的清单,系统启动之初就会读取这个文件,以便得到当前游戏所有资源列表。从前面分析整个mod.yaml... 查看详情
c#开发的openra的yaml文件读取和分析
C#开发的OpenRA的yaml文件读取和分析在前面已经看到OpenRA所有资源管理,都是来源于mod.yaml文件。说明了这个文件是一个资源描述的清单,系统启动之初就会读取这个文件,以便得到当前游戏所有资源列表。从前面分析整个mod.yaml... 查看详情