Golang实践录:读取ini配置文件

本文对 ini 文件进行解析。

概述

某Delphi项目需要做一些额外的配置,因为原本的配置文件是ini格式的,为不影响已有代码,而且delphi读取解析ini比较简单,考虑到兼容性,最终还是新建单独的ini配置文件并解析。为了对比数据一致性,除了Delphi工程外,还在另一golang工程实现相同的算法,所用的配置文件,完全相同。本文使用 Golang 解析 ini。

测试

github仓库在此下载:

go get gopkg.in/ini.v1go mod vendor # 加入vendor

截取发文时,最新版本为v1.67.0

引入包,代码片段:

import (ini "gopkg.in/ini.v1"
)

配置文件config.ini文件内容:

# ini 测试样例[section1]
sec1 = 110 210 ddd 99 | 133 135 1 2 1588 1509 | 310-410
sec2 = late \n lee | Jim Kent[section2]
id   = 250
arrint = 1 | 2 | 3
arrstr = apple, apple2, apple3

测试代码:

package testimport ("fmt""testing""gopkg.in/ini.v1"
)var (cfgFile string = "config.ini"
)func TestIni(t *testing.T) {fmt.Println("test of ini...")// 加载cfg, err := ini.Load(cfgFile)if err != nil {fmt.Printf("Fail to read file: %v", err)return}// 读一节mySection := cfg.Section("section1")fmt.Println("keystrings:", mySection.KeyStrings())// 解析for _, key := range mySection.KeyStrings() {fmt.Printf("key: [%v]\nvalue: ", key)values := mySection.Key(key).Strings("|")for _, item := range values {fmt.Printf("[%v] ", item)}fmt.Printf("\n--------\n")}// 按单个字符串strVlaue := cfg.Section("section2").Key("id").Value()fmt.Printf("section2.id value: %v\n", strVlaue)// 数值,以"|"分隔arrVlaueInt := cfg.Section("section2").Key("arrint").ValidInts("|")fmt.Printf("section2.arrint value: %v\n", arrVlaueInt)// 字符串,以","分隔arrVlaueStr := cfg.Section("section2").Key("arrstr").Strings(",")fmt.Printf("section2.arrstr value: %v\n", arrVlaueStr)// 写入inicfg.Section("").Key("name").SetValue("foobar")cfg.Section("info").Key("appVer").SetValue("1.3")cfg.Section("info").Key("author").SetValue("Late Lee")// 另起文件cfg.SaveTo("output.ini")
}

输出结果:

test of ini...
keystrings: [sec1 sec2]
key: [sec1]
value: [110 210 ddd 99] [133 135 1 2 1588 1509] [310-410]
--------
key: [sec2]
value: [late \n lee] [Jim Kent]
--------
section2.id value: 250
section2.arrint value: [1 2 3]
section2.arrstr value: [apple apple2 apple3]

新生成的文件output.ini内容:

name = foobar# ini 测试样例
[section1]
sec1 = 110 210 ddd 99 | 133 135 1 2 1588 1509 | 310-410
sec2 = late \n lee | Jim Kent[section2]
id     = 250
arrint = 1 | 2 | 3
arrstr = apple, apple2, apple3[info]
appVer = 1.3
author = Late Lee

小结

除了维护有一定历史的工程外用到ini外,笔者一般会选择其它格式,因此测试代码较简单。就目前看,主要还是yaml。考虑到兼容性,也会用到xml。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么 SQL 日志文件很大,我应该如何处理?

SQL Server 日志文件是记录所有数据库事务和修改的事务日志文件。在 SQL 术语中,此日志文件记录对数据库执行的所有 INSERT、UPDATE 和 DELETE 查询操作。 如果数据库处于联机状态或处于恢复状态时日志已满,则 SQL Server 通常会发出 9002 错误。在这种…

【刷题】快速排序

快速排序 1.将第一个元素作为pivot(为了防止顺序数组,随机选择一个换到第一个) 2.定义左右各一个指针 3.移动右指针,使得指针右边的element都大于pivot,同样使得左指针左边的element都小于pivot,直到两个指…

Java入门基础:浅显易懂 赋值运算符

运算符是对常量或者变量进行操作的符号,Java的运算符有六类:算术运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符,三元运算符 1.赋值运算符 符号作用说明赋值a 10 将右边的值赋值给左边的变量加后赋值a b 等价于 a a b-减…

代码随想录算法训练营第23天|● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇

108. 将有序数组转换为二叉搜索树 简单 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1: …

技术前沿丨Teranode如何实现无限扩容

​​发表时间:2023年9月15日 BSV区块链协会的技术团队目前正在努力开发Teranode,这是一款比特币节点软件,其最终目标是实现比特币的无限扩容。然而,正如BSV区块链协会网络基础设施负责人Jake Jones在2023年6月举行的伦敦区块链大会…

应用密码学期末复习(3)

目录 第三章 现代密码学应用案例 3.1安全电子邮件方案 3.1.1 PGP产生的背景 3.2 PGP提供了一个安全电子邮件解决方案 3.2.1 PGP加密流程 3.2.2 PGP解密流程 3.2.3 PGP整合了对称加密和公钥加密的方案 3.3 PGP数字签名和Hash函数 3.4 公钥分发与认证——去中心化模型 …

php+vue.js流浪动物宠物领养公益网站phpstudy/wamp/xammp

使用公益网站的分为管理员和用户二个权限子模块。 管理员所能使用的功能主要有:首页、个人中心、用户管理、咨询新闻管理、网站公告管理、绝育公告管理、合作医院管理、咨询类型管理、待领养动物管理、动物品种管理、动物领养管理、动物绝育申请管理、系统管理等。 …

fiddler抓包安卓

一、打断点 1、安卓手机和电脑在同一局域网下,手机连接的网络开启手动代理,ip填写电脑ip,端口填写fiddler中配置的端口。 ip查看: 端口配置:tools-options-connections 2、安装证书,手机浏览器输入电脑ip…

【深度学习】KMeans中自动K值的确认方法

1 前言 聚类常用于数据探索或挖掘前期,在没有做先验经验的背景下做的探索性分析,也适用于样本量较大情况下的数据预处理等方面工作。例如针对企业整体用户特征,在未得到相关知识或经验之前先根据数据本身特点进行用户分群,然后再…

22款奔驰GLS450升级香氛负离子 淡淡的幽香

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置,也可以单独加装香氛系统或者是负离子发生器,香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中,而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…

Linux如何扩增新盘

随笔记录 目录 1.新增磁盘步骤 1.1. 在linux 上添加一个块硬盘 1.2 新增硬盘分区 1.3 初始化新增硬盘分区 1.4 挂载 2.永久挂载 1.新增磁盘步骤 1.1. 在linux 上添加一个块硬盘 1.2 新增硬盘分区 # lsblk -f 可以看到,此时我们新添加进去的磁盘还并未进行分…

基于JSP的网上购书系统的设计与实现

基于JSP的网上购书系统设计与实现 摘要: 随着如今互联网与计算机技术的高速发展,各种先进的技术为人们的生活带来了极大的方便,网络应用领域也一天天扩大。在虚拟网络中买卖交易商品,人们越来越来喜欢这种网上购物方式&#xff0…

【洛谷 B2031】计算三角形面积 题解(顺序结构+海伦公式)

计算三角形面积 题目描述 平面上有一个三角形,它的三个顶点坐标分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1​,y1​),(x2​,y2​),(x3​,y3​),那么请问这个三角形的面积是多少。 输入格式 输入仅一行…

SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel | 京东云技术团队

前言:作者查阅了Sentinel官网、51CTO、CSDN、码农家园、博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例,因此整理了本文,主要介绍SpringMvc集成Sentinel SpringMvc集成Sentinel 一、Sentinel 介绍 随着微服务的流行&…

拼图 游戏

运行出的游戏界面如下:按住A不松开,显示完整图片;松开A显示随机打乱的图片 User类 package domain;/*** ClassName: User* Author: Kox* Data: 2023/2/2* Sketch:*/ public class User {private String username;private String password;p…

linxu磁盘介绍与磁盘管理

SAS硬盘 300G 600G 900G 容量 SATA硬盘 SSD 固态硬盘 SCSI硬盘 IDE硬盘 df (disk free) 列出文件系统的整体磁盘使用量 df -h du (desk used) 检查磁盘空间使用量 du --help fdisk 用来磁盘分区 fdisk -l

每日一题(LeetCode)----哈希表--四数相加 II

每日一题(LeetCode)----哈希表–四数相加 II 1.题目&#xff08;454. 四数相加 II&#xff09; 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnu…

后端Java日常实习生面试(七牛云2023年11月14日)

面试岗位为&#xff1a;Java 后端开发实习生 面试时长&#xff1a;60分钟 面试时间&#xff1a;2023年11月14日 首先做一下简单的自我介绍吧面试官说先来说一下 Java 基础吧 多态了解吗&#xff1f;&#xff08;了解&#xff0c;一个行为有不同的表现形式&#xff09; 知道…

Vue diff 算法探秘:如何实现快速渲染

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…