有这样一种使用场景,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注释相关推荐

  1. notepadd++打开文件时保留上次打开文件的解决办法

    用notepadd++打开文件时,总是打开上一次打开的文件,弄得我很烦 自从用了度娘,心情顿时好了,解决办法是这样的:

  2. Jmeter中写入csv文件时保留 逗号 和 双引号

    一.csv保留逗号,写入一列 Jmeter执行写入csv文件的时候,如果有逗号,会将写入内容分隔成两列.为了让内容不分隔成两列,而是存在一列中,就需要处理逗号进行保留 给a赋值为:qqq,qqq,qq ...

  3. c语言解析toml文件,使用cpptoml 读取 TOML 格式配置文件

    1. 获取cpptoml 只需要 cpptoml.h . $ git clone https://github.com/skystrife/cpptoml.git 2. TOM配置 mysql.tom ...

  4. linux压缩文件不保留原文件

    tar -zcvf 9701.tar.gz 9701* --remove-files --remove-files         在添加文件至归档后删除它们 //使用该参数后,将在文件加入压缩文件后 ...

  5. idea创建文件时生成文档注释

    一.打开设置(快捷键Ctrl+Alt+S) 打开idea,点击左上角的依次选择File - Settings,进入Settings界面 二.找到 ' File and Code Templates ' ...

  6. PyCharm在创建py文件时自动添加头部注释

    在Pycharm主界面找到 File ----->> Setting ----->> Editor ----->> File and Code Templates ...

  7. 标签打印软件输出PDF文件过大时如何解决?

    在用标签打印软件制作标签输出PDF文件时,如果数据过多可能会出现输出的PDF文件过大,这种情况如何解决呢?在标签打印软件中,输出PDF文件时可以对PDF文件进行压缩和拆分,压缩方式有六种,分别为:默认 ...

  8. Mac下解决复制重复文件时,没有像Windows“保留二者”的选项 - Mac文件夹合并,保留重复文件 - xx(1).jpg

    情景 你需要在Mac下复制文件到文件夹"B",但是有部分文件重复了,这时系统没有"保留二者"的选项,只能"跳过","停止" ...

  9. [ArcGIS] 表格输出为shp时日期时间列只保留日期而时间被截掉

    1.首先将存有GPS数据的表格加载到ArcGIS中, 2.然后右击表格-->Display XY Data,生成矢量数据. 查看dataall_csv&Events的属性表,可以看到此时 ...

最新文章

  1. 实现Ant Design 自定义表单组件
  2. 大连网络推广明确做好网站标题优化对网站排名的提升影响
  3. 用 JOTM 向Servlet中添加事务
  4. 【转】用 PHP V5 开发多任务应用程序
  5. origin画图_把heatmap翻一转:imshow的origin和extent
  6. PolyData之DataBounds
  7. python traceback most recent_pyspider启动错误: Traceback (most recent call last):
  8. JavaScript HTML5脚本编程——“跨文档消息传递”的注意要点
  9. php利用ftp上传视频,PHP用FTP类上传文件视频等的简单实现方法
  10. hadoop安装教程学习
  11. SqlServer——Excel连接数据库相关知识
  12. free-mybatis-plugin插件下载
  13. P4839 P哥的桶 题解
  14. 集美大学计算机毕业论文,集美大学毕业论文要求.doc
  15. 一次HDFS JN lag延时问题的排查分析后续:RM陡增traffic的来源分析
  16. 鼠标悬浮在button按钮上时的事件
  17. baby计算机英语怎么读,英语单词baby怎么读,baby的音标是什么,baby是什么意思 - 音标网...
  18. Crackme007
  19. html5网页构成要素有哪些,网页的基本构成元素有哪些
  20. Howto: 黑莓手机上读取AP的MAC地址

热门文章

  1. 博弈论——《取石子》《取石子游戏》
  2. UE4高级功能--初探超大无缝地图的实现LevelStream
  3. 动态网站开发技术学习1:走进ASP.NET
  4. 自建局域网(直连和路由器、交换机)
  5. VML学习笔记(1)——基本概念
  6. [从头学绘画] 第13节 六十四式八卦掌 (9-16)
  7. 智能隐私:如何保障我们的个人信息
  8. 妙用html5的八大特性来开发移动webAPP
  9. java keyset ==_Java中keySet()返回值的排序问题
  10. 这些酷酷的文字特效图片,制作真的很简单!