Go语言从INI配置文件中读取需要的值
生命不息,学习不止
- 题外话
- INI配置文件
- 从 INI 文件中取值
- getValue() 函数
- 你以为结束了
题外话
清晨第一缕阳光打在我的脸上,我从我席梦思床垫上爬起,拿起我的iPhone56,定了一份加了三斤可食用金粉的麻辣烫,哎,又是乏味的一个早上…… 人生就是这么简简单单
话说今天的风是真的大,是真冷啊
废话不多说,上货
INI配置文件
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。但在某些情况,还是要直接编辑ini才方便,一般只有很熟悉windows才能去直接编辑。
举个例子
ini的文件格式就长这样,一般用于操作系统、虚幻游戏引擎、GIT 版本管理中,这种配置文件的文件扩展名为.ini。
INI 文件由多行文本组成,整个配置由[ ]拆分为多个“段”(section)。每个段中又以=分割为“键”和“值”。
INI 文件以;置于行首视为注释,注释后将不会被处理和识别
上图第一行就是注释
从 INI 文件中取值
我们创建一个 woner.ini 文件,将上方内容复制到该文件中。
内容如下
; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1
CMCDLLNAME32=mapi32.dll
CMC=1
MAPIX=1
MAPIXVER=1.0.0.1
OLEMessaging=1
准备好 woner.ini 文件后,下面我们开始尝试读取该 INI 文件,并从文件中获取需要的数据,
我们的目的是获取CMCDLLNAME32=mapi32.dll这行的 mapi32.dll
完整的示例代码如下所示:
package mainimport ("bufio""fmt""os""strings"
)// 根据文件名,段名,键名获取ini的值
func getValue(filename, expectSection, expectKey string) string {// 打开文件file, err := os.Open(filename)// 文件找不到,返回空if err != nil {return "123"}// 在函数结束时,关闭文件defer file.Close()// 使用读取器读取文件reader := bufio.NewReader(file)// 当前读取的段的名字var sectionName stringfor {// 读取文件的一行linestr, err := reader.ReadString('\n')if err != nil {break}// 切掉行的左右两边的空白字符linestr = strings.TrimSpace(linestr)// 忽略空行if linestr == "" {continue}// 忽略注释if linestr[0] == ';' {continue}// 行首和尾巴分别是方括号的,说明是段标记的起止符if linestr[0] == '[' && linestr[len(linestr)-1] == ']' {// 将段名取出sectionName = linestr[1 : len(linestr)-1]// 这个段是希望读取的} else if sectionName == expectSection {// 切开等号分割的键值对pair := strings.Split(linestr, "=")// 保证切开只有1个等号分割的简直情况if len(pair) == 2 {// 去掉键的多余空白字符key := strings.TrimSpace(pair[0])// 是期望的键if key == expectKey {// 返回去掉空白字符的值return strings.TrimSpace(pair[1])}}}}return "123123"
}func main() {fmt.Println(getValue("woner.ini", "Mail", "CMCDLLNAME32"))
}
保姆式注解让你一眼就能看懂
运行结果
getValue() 函数
本例并不是将整个 INI 文件读取保存后再获取需要的字段数据并返回,这里使用 getValue() 函数,每次从指定文件中找到需要的段(Section)及键(Key)对应的值。
getValue() 函数的声明如下:
func getValue(filename, expectSection, expectKey string) string
参数说明如下。
filename:INI 文件的文件名。
expectSection:期望读取的段。
expectKey:期望读取段中的键。
你以为结束了
ini文件内容
; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1
CMCDLLNAME32=mapi32.dll
CMC=1
MAPIX=1
MAPIXVER=1.0.0.1
OLEMessaging=1
fmt.Println(getValue("woner.ini", "Mail", "CMCDLLNAME32")) //调用函数
方法中第二个参数 “Mail” 对应的是ini文件中的[Mail]块,CMCDLLNAME32 表示 INI 文件中[Mail]块中键名,我们通过这个键名获取到我们想要的值。
小问题:如何通过键去修改值呢?
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!
Go语言从INI配置文件中读取需要的值相关推荐
- Feign从配置文件中读取url
Feign的url和name都是可配置的,就是从配置文件中读取的属性值,然后用占位符引用就可以了: ${rpc.url} @FeignClient(name = "me",url ...
- springboot取yml中的值_SpringBoot 中从yml配置文件中读取常用的参数值
SpringBoot现在基本上都是使用application-XXX.yml(生产环境为pro,开发测试环境为dev)来配置项目中的一些配置条件,在springboot中还可以通过从yml文件中将ym ...
- 如何用c语言从txt文件中读取数据
用C语言从txt文件中读取数据,可以使用C标准库文件自带的文件接口函数进行操作. 一.打开文件: FILE *fopen(const char *filename, const char *mode) ...
- Spring—使用类加载从配置文件中读取配置
引言 SpringBoot中可以使用@Value直接resources目录下的配置文件中读取相关配置参数.但是非微服务模式下,可以使用类加载机制进行获取. 模板 public class Prop ...
- java从配置文件中读取参数
java从配置文件中读取参数的方式 有的时候我们需要将一些固定的配置信息写到yml文件中去,然后在类中在读取 #首先就得先在yml文件中配置参数 upload:param:"test&quo ...
- 【Spring Boot】从配置文件中读取配置参数
前言 在生产环境中,经常会用到各种各样的参数,为了避免代码太过死板,一般将参数写入配置文件,然后需要用到参数的时候从配置文件中读取,下面总结出几种从配置文件中读取配置参数的方法. 环境搭建 现有配置文 ...
- Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)之二——只改变第一出现的那一行
一.背景 在之前的文章中有介绍过<Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)> 但是这种方法存在一定的问题,就是假如某个变量在一个文件中出现两次,却只想更改 ...
- Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)
背景 项目初期,创业初期,对于部署还停留在比较简单的时期等等...部署代码需要脚本部署,那么不同环境部署代码的配置也不一样,同一个环境下,多个节点的配置不一样.同一个节点中,多个服务会用到同一个配置项 ...
- python如何调用参数配置文件_【Python学习笔记七】从配置文件中读取参数
将一些需要经常更改的参数存放在配置文件中,通过读取配置文件来获取参数,这样修改以及使用起来比较方便 1.首先是配置文件的写法,如下一个environment.ini文件: a:里面"[]&q ...
最新文章
- LeetCode Intersection of Two Linked Lists
- 简单理解kafka---入门
- 树莓派apt-get下载网速太慢
- 设计师学习HTML/CSS之路-13
- java订单超时取消设计_quartz框架和关闭超时订单
- linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
- apache2.2.15与PHP5.3.3安装设置完成后,apache启动失败
- 《R语言机器学习:实用案例分析》——1.3节使用函数
- c++中父类子类对象指针相互转换,成员函数调用方式
- STM32/STM8选型手册
- 12款高质量的免费 HTML 网页模板下载
- 冰点还原精灵破解版|冰点还原精灵中文破解版下载(附冰点还原精灵注册机及许可证密钥)
- Excel怎么设置单元格的边框
- [Video Transformer] VTN: Video Transformer Network
- 各代iphone尺寸_历代iPhone机身厚度对比: 6代最薄, iPhone X 难进前五
- Unity 使用AVProVideo插件加载并下载视频
- 裁员、转型、突围,两图带你看懂交易所困局
- php preg_match 漏洞,PHP preg_match()函数信息泄露漏洞
- TCP与UDP的区别是什么?
- 计算机培训通讯报道,新员工培训通讯稿3篇