Golang输出toml文件时保留原toml注释
有这样一种使用场景,Golang从文件或字符串中读取toml数据并解析,然后进行相应的修改,最后重新写回到文件中,由于一般的toml库不会去特别处理注释,重新生成的toml文件中所有原始的注释都会丢失,以 github.com/BurntSushi/toml 为例:
package mainimport ("log""os""github.com/BurntSushi/toml"
)func main() {tomlText := `
#comment for user
[user]
name = "Tom" # comment for name
age = 30 # comment for age
`var m map[string]interface{}if _, err := toml.Decode(tomlText, &m); err != nil {log.Fatal(err)}if err := toml.NewEncoder(os.Stdout).Encode(m); err != nil {log.Fatal(err)}
}
以上代码会输出:
[user]age = 30name = "Tom"
如果需要保留注释,可以使用 github.com/GuanceCloud/toml 库, 该库是 github.com/BurntSushi/toml
的一个fork分支,对注释做了特别的处理,解析toml数据时会根据一定的规则把注释绑定到相应的key上,之后如果调用库中的新增加的EncodeWithComments()
方法,在生成toml时,每遇到一个key,会去查询是否绑定了注释,如果有则在相应的位置输出注释,针对上面的案例,使用 github.com/GuanceCloud/toml
来重写:
package mainimport ("log""os""github.com/GuanceCloud/toml"
)func main() {tomlText := `
#comment for user
[user]
name = "Tom" # comment for name
age = 30 # comment for age
`var m map[string]interface{}meta, err := toml.Decode(tomlText, &m)if err != nil {log.Fatal(err)}if err := toml.NewEncoder(os.Stdout).EncodeWithComments(m, meta); err != nil {log.Fatal(err)}
}
会输出:
#comment for user
[user]age = 30 # comment for agename = "Tom" # comment for name
关于注释的绑定规则以及更复杂的使用场景,请参考 https://github.com/GuanceCloud/toml/blob/master/_example/commet-preserving-example.go
Golang输出toml文件时保留原toml注释相关推荐
- notepadd++打开文件时保留上次打开文件的解决办法
用notepadd++打开文件时,总是打开上一次打开的文件,弄得我很烦 自从用了度娘,心情顿时好了,解决办法是这样的:
- Jmeter中写入csv文件时保留 逗号 和 双引号
一.csv保留逗号,写入一列 Jmeter执行写入csv文件的时候,如果有逗号,会将写入内容分隔成两列.为了让内容不分隔成两列,而是存在一列中,就需要处理逗号进行保留 给a赋值为:qqq,qqq,qq ...
- c语言解析toml文件,使用cpptoml 读取 TOML 格式配置文件
1. 获取cpptoml 只需要 cpptoml.h . $ git clone https://github.com/skystrife/cpptoml.git 2. TOM配置 mysql.tom ...
- linux压缩文件不保留原文件
tar -zcvf 9701.tar.gz 9701* --remove-files --remove-files 在添加文件至归档后删除它们 //使用该参数后,将在文件加入压缩文件后 ...
- idea创建文件时生成文档注释
一.打开设置(快捷键Ctrl+Alt+S) 打开idea,点击左上角的依次选择File - Settings,进入Settings界面 二.找到 ' File and Code Templates ' ...
- PyCharm在创建py文件时自动添加头部注释
在Pycharm主界面找到 File ----->> Setting ----->> Editor ----->> File and Code Templates ...
- 标签打印软件输出PDF文件过大时如何解决?
在用标签打印软件制作标签输出PDF文件时,如果数据过多可能会出现输出的PDF文件过大,这种情况如何解决呢?在标签打印软件中,输出PDF文件时可以对PDF文件进行压缩和拆分,压缩方式有六种,分别为:默认 ...
- Mac下解决复制重复文件时,没有像Windows“保留二者”的选项 - Mac文件夹合并,保留重复文件 - xx(1).jpg
情景 你需要在Mac下复制文件到文件夹"B",但是有部分文件重复了,这时系统没有"保留二者"的选项,只能"跳过","停止" ...
- [ArcGIS] 表格输出为shp时日期时间列只保留日期而时间被截掉
1.首先将存有GPS数据的表格加载到ArcGIS中, 2.然后右击表格-->Display XY Data,生成矢量数据. 查看dataall_csv&Events的属性表,可以看到此时 ...
最新文章
- 实现Ant Design 自定义表单组件
- 大连网络推广明确做好网站标题优化对网站排名的提升影响
- 用 JOTM 向Servlet中添加事务
- 【转】用 PHP V5 开发多任务应用程序
- origin画图_把heatmap翻一转:imshow的origin和extent
- PolyData之DataBounds
- python traceback most recent_pyspider启动错误: Traceback (most recent call last):
- JavaScript HTML5脚本编程——“跨文档消息传递”的注意要点
- php利用ftp上传视频,PHP用FTP类上传文件视频等的简单实现方法
- hadoop安装教程学习
- SqlServer——Excel连接数据库相关知识
- free-mybatis-plugin插件下载
- P4839 P哥的桶 题解
- 集美大学计算机毕业论文,集美大学毕业论文要求.doc
- 一次HDFS JN lag延时问题的排查分析后续:RM陡增traffic的来源分析
- 鼠标悬浮在button按钮上时的事件
- baby计算机英语怎么读,英语单词baby怎么读,baby的音标是什么,baby是什么意思 - 音标网...
- Crackme007
- html5网页构成要素有哪些,网页的基本构成元素有哪些
- Howto: 黑莓手机上读取AP的MAC地址