Go语言从入门到规范-6.9、Go处理yml和ini文件

网友投稿 692 2022-09-08

Go语言从入门到规范-6.9、Go处理yml和ini文件

Go语言从入门到规范-6.9、Go处理yml和ini文件

Go语言从入门到规范-6.9、Go处理yml和ini文件

文章目录

​​Go语言从入门到规范-6.9、Go处理yml和ini文件​​

​​1. 前言​​​​2. ini概念​​

​​2.1 概述​​​​2.2 格式​​​​2.3 示例​​

​​3. Go语言处理ini文件​​

1. 前言

一般yml和ini都是作为配置文件来使用的,但是实际上它们都是一种新的语言,主要是方便序列化数据便于我们进行互联网数据传输而创建的,虽然它们没有json和xml那么频繁的使用,但是也是有很多使用场景的,之前我们已经对yml做了简单介绍:​

接下来我们再对ini做学习和总结。

2. ini概念

2.1 概述

INI文件是一种无固定标准格式的配置文件。它以简单的文字与简单的结构组成,常常使用在Windows操作系统上,许多程序也会采用INI文件做为配置文件之用。Windows操作系统后来以注册表的形式取代掉INI档。INI文件的命名来源,是取自英文“初始(Initial)”的首字缩写,正与它的用途——初始化程序相应。有时候,INI文件也会以不同的扩展名,如“.CFG”、“.CONF”、或是“.TXT”代替。

目前还有很多程序和软件使用ini文件进行初始化以及作为一些配置文件来使用。

2.2 格式

节:section

参数:键=值 name=value

注解:注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

2.3 示例

; last modified 1 April 2001 by John Doe[owner]name=John Doeorganization=Acme Products[database]server=192.0.2.42 ; use IP address in case network name resolution is not workingport=143file="acme payroll.dat"

比如mysql数据我们就可以借助ini文件对其进行一些配置。

3. Go语言处理ini文件

gopkg.in/ini.v1

使用说明:

​​possible values : production, developmentapp_mode = development[paths]# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)data = /home/git/grafana[server]# Protocol (or = The port to use= 9999# Redirect to correct domain if host header does not match domain# Prevents DNS rebinding attacksenforce_domain = true

很好,接下来我们需要编写 main.go 文件来操作刚才创建的配置文件。

package mainimport ( "fmt" "os" "gopkg.in/ini.v1")func main() { cfg, err := ini.Load("my.ini") if err != nil { fmt.Printf("Fail to read file: %v", err) os.Exit(1) } // 典型读取操作,默认分区可以使用空字符串表示 fmt.Println("App Mode:", cfg.Section("").Key("app_mode").String()) fmt.Println("Data Path:", cfg.Section("paths").Key("data").String()) // 我们可以做一些候选值限制的操作 fmt.Println("Server Protocol:", cfg.Section("server").Key("protocol").In("[]string{"" // 如果读取的值不在候选列表内,则会回退使用提供的默认值 fmt.Println("Email Protocol:", cfg.Section("server").Key("protocol").In("smtp", []string{"imap", "smtp"})) // 试一试自动类型转换 fmt.Printf("Port Number: (%[1]T) %[1]d\n", cfg.Section("server").Key(" fmt.Printf("Enforce Domain: (%[1]T) %[1]v\n", cfg.Section("server").Key("enforce_domain").MustBool(false)) // 差不多了,修改某个值然后进行保存 cfg.Section("").Key("app_mode").SetValue("production") cfg.SaveTo("my.ini.local")}

结果:

App Mode: developmentData Path: /home/git/grafanaServer Protocol: Protocol: smtpPort Number: (int) 9999Enforce Domain: (bool) true

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:别@我了,我就一个写代码的,我哪知道哪家是不正规的,Python爬取美团店铺数
下一篇:win10下cmder加wsl的多终端配置使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~