今天工作中碰到的问题,要求修改此配置文件,没看出来是什么格式,用了下面的思路:

  mysql {
# If any of the files below are set, TLS encryption is enabled
tls {
ca_file = "/etc/ssl/certs/my_ca.crt"
ca_path = "/etc/ssl/certs/"
certificate_file = "/etc/ssl/certs/private/client.crt"
private_key_file = "/etc/ssl/certs/private/client.key"
cipher = "DHE-RSA-AES256-SHA:AES128-SHA" tls_required = yes
tls_check_cert = no
tls_check_cert_cn = no
} # If yes, (or auto and libmysqlclient reports warnings are
# available), will retrieve and log additional warnings from
# the server if an error has occured. Defaults to 'auto'
warnings = auto
} postgresql { # unlike MySQL, which has a tls{} connection configuration, postgresql
# uses its connection parameters - see the radius_db option below in
# this file # Send application_name to the postgres server
# Only supported in PG 9.0 and greater. Defaults to no.
send_application_name = yes
}
# Connection info:
#
server = "127.0.0.1"
port = 5432
login = "testuser13"
password = "Tpass123" # Database table configuration for everything except Oracle
radius_db = "test13" # If you are using Oracle then use this instead
# radius_db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=your_sid)))"

用Go代码修改如上所示的配置文件,如radius_db字段的值,步骤如下:

  • github.com/go-ini/ini获取键radius_db的值;
  • fmt.Sprintf()radius_db = "test13"整体包装成字符串;
  • fmt.Sprintf()包装新字符串;
  • strings.Replace()整体替换。

主要实现代码:

// 根据路径获取文件
configFile := "./sql.conf" configContent, err := ioutil.ReadFile(configFile) // 加载配置文件,跳过无法解析的行;设置key/value分隔符为"="
cfg, err := ini.LoadSources(ini.LoadOptions
{SkipUnrecognizableLines:true, KeyValueDelimiters:"="}, configFile) // 获取"radius_db"的值
sqlDBName := cfg.Section("").Key("radius_db").String() // newName指要修改的新值
sqlDBNameOld := fmt.Sprintf(`radius_db = "%s"`, sqlDBName)
sqlDBNameNew := fmt.Sprintf(`radius_db = "%s"`, newName) // 替换并写入
newConfig := strings.Replace(string(configContent), sqlDBNameOld, sqlDBNameNew, 1) // 写入文件
err = ioutil.WriteFile(configFile, []byte(newConfig), 0644)

Golang读取并修改非主流配置文件的更多相关文章

  1. C# 配置文件读取与修改

    C# 配置文件读取与修改   配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件, 一种是web的配置文件. 两种配置文件最大的区别是web的配置文件更新之后会实时更新, 应用 ...

  2. C# 配置文件读取与修改(转)

    C# 配置文件读取与修改   配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件, 一种是web的配置文件. 两种配置文件最大的区别是web的配置文件更新之后会实时更新, 应用 ...

  3. 配置文件——App.config文件读取和修改

    作为普通的xml文件读取的话,首先就要知道怎么寻找文件的路径.我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.Ex ...

  4. C#项目实例中读取并修改App.config文件

    C#项目是指一系列独特的.复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间.预算.资源限定内,依据规范完成.项目参数包括项目范围.质量.成本.时间.资源. 1. 向C#项目实 ...

  5. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  6. WPF C#之读取并修改App.config文件

    原文:WPF C#之读取并修改App.config文件 简单介绍App.config App.config文件一般是存放数据库连接字符串的.  下面来简单介绍一下App.config文件的修改和更新. ...

  7. golang 读取 ini配置信息

      package main //BY: 29295842@qq.com//这个有一定问题   如果配置信息里有中文就不行//[Server] ;MYSQL配置//Server=localhost   ...

  8. 在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。

    在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除. 作者:邵盛松 2009-09-05 前言 1关于的BLOB(Binary)数据的存储和读取功能主要参考了MSDN上的一篇& ...

  9. IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据

    使用IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据? 解决办法:tomcat配置中,On frame deactivation属性选择Update cla ...

随机推荐

  1. Android 9.0网络权限适配

    在做Android开发时,使用华为的p20和平板(均为Android 9.0)测试时,发现不能使用WIFI网络,一番郁闷纠结查找后 直接上方法: 在res文件夹下创建xml文件夹,在xml里面创建文件 ...

  2. 资源管理(Resource Management),知识点

    资料 网址 资源管理(Resource Management)服务 包含一系列支持企业IT治理的资源管理产品集合,主要包括资源组和资源目录.通过资源管理服务,您可以按照业务需要搭建合适的资源组织关系, ...

  3. 【视频技术】FFMPEG应用(转)

    https://blog.csdn.net/kaikai136412162/article/details/80746961 https://blog.csdn.net/weixin_37897683 ...

  4. 使用EventBus对模块解耦(附实例)

    用于模块间解耦,通过发布订阅的方式调用,每个人只负责自己的那部分. 写个小例子,比如现在有三个模块,订单.购物车.优惠券,由不同的人负责开发. 负责订单模块的人现在需要写个生成订单的方法,生成订单的逻 ...

  5. 26 配置TensorFlow 1.9

    https://www.ctolib.com/topics-133854.html sudo apt install libatlas-base-dev pip3 install tensorflow ...

  6. 原题链接在这里:980. Unique Paths III

    原题链接在这里:https://leetcode.com/problems/unique-paths-iii/ 题目: On a 2-dimensional grid, there are 4 typ ...

  7. jieba分词wordcloud词云

    1.jieba库的基本介绍 (1).jieba是优秀的中文分词第三方库 中文文本需要通过分词获得单个的词语 jieba是优秀的中文分词第三方库,需要额外安装 jieba库提供三种分词模式,最简单只需掌 ...

  8. prototype、__proto__、constructor

    prototype:每个函数都有一个prototype属性,这个属性指向一个对象,这个对象叫原型对象. 作用:节约内存.扩展属性和方法.可以实现类之间的继承 __proto__:每个通过构造函数new ...

  9. 洛谷P2341 [HAOI2006]受欢迎的牛|【模板】强连通分量

    https://www.luogu.org/problem/P2341 缩点之后唯一 一个出度为0的点 #include<cstdio> #include<iostream> ...

  10. nuxtjs如何通过路由meta信息控制路由查看权限

    我们知道NUXTJS可以通过路由中间件进行路由鉴权,中间件允许您定义一个自定义函数运行在一个页面或一组页面渲染之前. 但是我在实际使用过程中发现,中间件只有在路由跳转到路由中时才会进入,而在强制刷新网 ...