生命不息,学习不止

  • 题外话
    • 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配置文件中读取需要的值相关推荐

  1. Feign从配置文件中读取url

    Feign的url和name都是可配置的,就是从配置文件中读取的属性值,然后用占位符引用就可以了: ${rpc.url} @FeignClient(name = "me",url ...

  2. springboot取yml中的值_SpringBoot 中从yml配置文件中读取常用的参数值

    SpringBoot现在基本上都是使用application-XXX.yml(生产环境为pro,开发测试环境为dev)来配置项目中的一些配置条件,在springboot中还可以通过从yml文件中将ym ...

  3. 如何用c语言从txt文件中读取数据

    用C语言从txt文件中读取数据,可以使用C标准库文件自带的文件接口函数进行操作. 一.打开文件: FILE *fopen(const char *filename, const char *mode) ...

  4. Spring—使用类加载从配置文件中读取配置

    引言   SpringBoot中可以使用@Value直接resources目录下的配置文件中读取相关配置参数.但是非微服务模式下,可以使用类加载机制进行获取. 模板 public class Prop ...

  5. java从配置文件中读取参数

    java从配置文件中读取参数的方式 有的时候我们需要将一些固定的配置信息写到yml文件中去,然后在类中在读取 #首先就得先在yml文件中配置参数 upload:param:"test&quo ...

  6. 【Spring Boot】从配置文件中读取配置参数

    前言 在生产环境中,经常会用到各种各样的参数,为了避免代码太过死板,一般将参数写入配置文件,然后需要用到参数的时候从配置文件中读取,下面总结出几种从配置文件中读取配置参数的方法. 环境搭建 现有配置文 ...

  7. Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)之二——只改变第一出现的那一行

    一.背景 在之前的文章中有介绍过<Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)> 但是这种方法存在一定的问题,就是假如某个变量在一个文件中出现两次,却只想更改 ...

  8. Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)

    背景 项目初期,创业初期,对于部署还停留在比较简单的时期等等...部署代码需要脚本部署,那么不同环境部署代码的配置也不一样,同一个环境下,多个节点的配置不一样.同一个节点中,多个服务会用到同一个配置项 ...

  9. python如何调用参数配置文件_【Python学习笔记七】从配置文件中读取参数

    将一些需要经常更改的参数存放在配置文件中,通过读取配置文件来获取参数,这样修改以及使用起来比较方便 1.首先是配置文件的写法,如下一个environment.ini文件: a:里面"[]&q ...

最新文章

  1. LeetCode Intersection of Two Linked Lists
  2. 简单理解kafka---入门
  3. 树莓派apt-get下载网速太慢
  4. 设计师学习HTML/CSS之路-13
  5. java订单超时取消设计_quartz框架和关闭超时订单
  6. linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
  7. apache2.2.15与PHP5.3.3安装设置完成后,apache启动失败
  8. 《R语言机器学习:实用案例分析》——1.3节使用函数
  9. c++中父类子类对象指针相互转换,成员函数调用方式
  10. STM32/STM8选型手册
  11. 12款高质量的免费 HTML 网页模板下载
  12. 冰点还原精灵破解版|冰点还原精灵中文破解版下载(附冰点还原精灵注册机及许可证密钥)
  13. Excel怎么设置单元格的边框
  14. [Video Transformer] VTN: Video Transformer Network
  15. 各代iphone尺寸_历代iPhone机身厚度对比: 6代最薄, iPhone X 难进前五
  16. Unity 使用AVProVideo插件加载并下载视频
  17. 裁员、转型、突围,两图带你看懂交易所困局
  18. php preg_match 漏洞,PHP preg_match()函数信息泄露漏洞
  19. TCP与UDP的区别是什么?
  20. 计算机培训通讯报道,新员工培训通讯稿3篇

热门文章

  1. 物联卡中心:电信物联卡官网,电信物联卡资费标准
  2. 微信公众号开发学习笔记(一)公众号分类
  3. Android 开发中的观察者模式应用实例
  4. English Learning - L3 作业打卡 Lesson1 Day4 2023.5.8 周一
  5. 一对一直播系统实现美颜预设功能的代码解决方式
  6. VGGNet架构解析
  7. 简单方法实现重力感应背景图(GravityImageView)
  8. 占位符及格式化输出的三种方法
  9. synchronized同步锁的三种方式
  10. 【快应用】微信H5 referer支付未拉起微信收银台