Golang读取配置文件(*.ini)信息

2023-10-27

package main

import (
	"fmt"
	"io/ioutil"
	"regexp"
	"strings"
)

func checkErr(e error) {
	if e != nil {
		panic(e)
	}
}

/*
函数名:getCfg(tag string, cfg string)string
参  数:tag string:参数的名称
	  cfg string:配置信息字符串
返回值:string:从配置信息"cfg"中查询到的第一个tag参数的配置值
创建时间:2018年12月3日
修订信息:
*/
func getCfg(tag string, filepath string) string {
	dat, err := ioutil.ReadFile(filepath) //读取文件
	checkErr(err)                         //检查是否有错误
	cfg := string(dat)                    //将读取到达配置文件转化为字符串
	var str string
	s1 := fmt.Sprintf("[^;]%s *= *.{1,}\\n", tag)
	s2 := fmt.Sprintf("%s *= *", tag)
	reg, err := regexp.Compile(s1)
	if err == nil {
		tag_str := reg.FindString(cfg) //在配置字符串中搜索
		if len(tag_str) > 0 {
			r, _ := regexp.Compile(s2)
			i := r.FindStringIndex(tag_str) //查找配置字符串的确切起始位置
			var h_str = make([]byte, len(tag_str)-i[1])
			copy(h_str, tag_str[i[1]:])
			str1 := fmt.Sprintln(string(h_str))
			str2 := strings.Replace(str1, "\n", "", -1)
			str = strings.Replace(str2, "\r", "", -1)
		}
	}
	return str
}

func main() {
	fmt.Println(getCfg("db1.Host", "demo.ini")) //输出:127.0.0.0
}

测试对应的配置文件

[mysql]
db1.Name = testMysqlDB
db1.Host = 127.0.0.1
db1.Port = 3306
db1.User = root
db1.Pwd = test
db1.colname  = ID:int,DataTime:string,DocTagName:string,DocValue:float64
; 测试INI风格的注释
; 这两行数据的前前面加入了分号,因此,这些数据被认为是注释,将不会影响配置文件正常情况

[tcp]
Port=   3309

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang读取配置文件(*.ini)信息 的相关文章

  • SQLSERVR 转换为数字类型numeric时出现算数溢出错误

    SQLSERVR 转换为数字类型numeric时出现算数溢出错误 情况一 在SQLSERVER中 关于数据的计算可能会导致出现如下的错误 遇到这类问题 一般都是由于结果超过了这个字段的长度 个字段的属性的概念 create table T1

随机推荐

  • 教你怎么用Vulnhub来搭建环境

    0x01 前言 Vulnhub它是一个提供各种漏洞环境的平台 里面大部分的环境是要用VMware或者VirtualBox打开运行的 如果只是练习一些常见的漏洞可以看我另外两篇用Docker来搭建各种漏洞靶场 妈妈再也不用担心我没有靶场练习了
  • 递归实现全排列

    设 R r1 r2 rn 是需要排列的 N 个元素 Ri R ri 设集合 中的元素 全排列记 为 Perm X ri Perm X 表示在 全排列 Perm X 的每一个排列前加上前缀 ri 得到的全排列 例如在 Perm X 的排列为
  • [java]java使用AES加密解密 ,AES-128/192/256-ECB加密模式

    直接上代码 是在springboot下直接test的 import org apache commons codec binary Base64 import org junit Test import org junit runner R
  • 【Linux 驱动篇(四)】设备树

    文章目录 一 什么是设备树 二 DTS DTB 和 DTC 三 DTS 语法 1 dtsi 头文件 2 设备节点 3 标准属性 3 1 compatible 属性 3 2 model 属性 3 3 status 属性 3 4 address
  • 4种线程池详解

    要配置一个线程池是比较复杂的 尤其是对于线程池的原理不是很清楚的情况下 很有可能配置的线程池不是较优的 因此在Executors类里面提供了一些静态工厂 生成一些常用的线程池 文章目录 ExecutorService概述 newSingle
  • HttpComponents(Apache HttpComponents Client 4.1.3)通过代理访问网页的设置方法

    HttpClient httpclient new DefaultHttpClient 这里是设置代理服务器的地方 HttpHost proxy new HttpHost 10 10 228 43 808 http httpclient g
  • win7 升级到 win10

    摘要 项目上遇到一个问题 客户提供一个软件在设备上点击运行后 转圈加载下就没有下文了 但是其他的软件又能正常运行 尝试了漏洞修护 系统修护 兼容性运行 管理员运行 32位兼容性进程检测等方式都不行 只能采取将win7升级到win10一试 在
  • vue学习,v-for不渲染

    最近在学习vue 使用axios v for做个搜索天气的小练习 发现只有第一次搜索有数据 改变数组后vue for不渲染 但使用console log可以看到数据确实更新了 使用this forceUpdate 这个不起作用 没办法了 只
  • Python实现桶排序

    Python实现桶排序 一 桶排序简介 桶排序 Bucket sort 是一种通过分桶和合并实现的排序算法 又被称为箱排序 桶排序先将数据分到有限数量的桶里 然后对每一个桶内的数据进行排序 桶内排序可以使用任何一种排序算法 如快速排序 最后
  • JVM系列(九) 垃圾收集器之 Serial / Serial Old

    回收期演变及概览 前面我们讲了很多 垃圾收集的原理和知识点 下面我们针对各种垃圾收集器进行JVM调优 JVM调优其实都是根据对应的垃圾收集器特性而去做调整和优化 不同垃圾收集器的产生总体可以划分为几个阶段 第一阶段 单线程收集时代 Seri
  • 【Unity粒子系统】

    转自 https blog csdn net m0 37679113 article details 75893700 接下来的图片就是Unity2017 1 0f3 编辑器中的粒子系统模块 了解粒子系统 必须先了解每一个属性都代表了什么
  • 程序员为什么被叫做“码农”,我来和大家聊一聊

    在现代社会 计算机技术和互联网行业的迅速发展 使得程序员这个职业在人们心中越来越受到重视 然而 与此同时 也出现了一些对于程序员职业的误解和偏见 今天我就想和小伙伴们一起聊聊这个有趣的话题 程序员被叫做 码农 名字的由来 让大家更加了解程序
  • rt-thead-studio 中实现 MPU6050基于DMP中断读取数据

    rt thead studio 中实现 MPU6050基于DMP中断读取数据 目录 文章目录 rt thead studio 中实现 MPU6050基于DMP中断读取数据 目录 toc 前言 mpl高级特性库问题 一 基于开发板创建闪灯工程
  • DNS服务器概念

    DNS服务概述 DNS Domain Name System 域名系统 在TCP IP 网络中有非常重要的地位 能够提供域名与IP地址的解析服务 DNS 是一个分布式数据库 命名系统采用层次的逻辑结构 如同一棵倒置的树 这个逻辑的树形结构称
  • linux中zip文件解压命令,Linux中zip压缩和unzip解压缩命令使用方法

    Linux继承了Unix以网络为核心的设计思想 是一个性能稳定的多用户网络操作系统 在Linux中 我们可以利用命令进行文件压缩 即zip压缩和unzip解压缩 这篇文章主要介绍了详解Linux中zip压缩和unzip解压缩命令及使用详解
  • 样本方差的快速计算-遍历一遍样本集

    在统计学中 经常需要样本的方差计算 比较麻烦的方式是 1 第一次遍历计算出样本的平均值 2 第二次遍历才能计算出样本的方差 上述方法在样本较少的情况下 非常合适 但如果样本非常大 这种方式就不可取了 而且如果样本是持续增长的 就都不适用了
  • Unity3d学习笔记(一)

    作业内容 1 简答题 解释 游戏对象 GameObjects 和 资源 Assets 的区别与联系 Asset是存储在硬盘上的文件 保存在Unity项目的Assets文件夹内 资源一定可以存在磁盘上 对象是运行期的东西 资源可以被对象使用
  • SLAM学习1 Ubuntu16.04安装ROS-kinetic

    wishchin sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc apt sources list d ros latest li
  • 2023牛客暑假多校7 CIM 题解

    文章目录 C Beautiful Sequence https ac nowcoder com acm contest 57361 C I We Love Strings https ac nowcoder com acm contest
  • Golang读取配置文件(*.ini)信息

    package main import fmt io ioutil regexp strings func checkErr e error if e nil panic e 函数名 getCfg tag string cfg string