在golang中,配置文件经常使用json格式。json格式的语法,有些繁琐,尤其是出现嵌套的时候,每一块都需要大括号包裹,看起来很臃肿。

本着简单易用的原则,个人开发了一个配置解析模块config,已在github开源。

下面介绍配置解析模块config的语法和使用方法。

基本语法

基本字符定义如下:

#			注释
= key=value, 赋值
[] 区域,可以表示一个结构体
[[]] 区域的数组,表示结构体的数组

使用tab进行缩进,每缩进一个tab,就表示嵌套一级。

配置文件示例:

#comment like this
host = example.com
ipaddr = 192.168.1.56
port = 43
compression = on
max_conn = 68182 port_enable = true order = 98, 652, 31, 599, 566, 12, 208 [monitor]
enabled = true
ip = 192.168.1.161
[MAC]
mac1 = AA:BB:CC
mac2 = DD:EE:FF
port = 3698
cluster = 127.0.0.1, 192.168.16.163 [portal]
enabled =true
ip = 192.168.8.198
port = 3036
#array
[[cluster]]
addr = 10.0.1.160
wgh = 20
[[cluster]]
addr = 10.12.201.187
wgh = 10

废话不多说,直接看例子。

安装

go get github.com/yangeagle/config

例子

例子配置文件simple.conf:

#comment like this
host = example.com
ipaddr = 192.168.1.56
port = 43
compression = on #comment like this height = 8848.16, 693.254, 1.230, 996 # google
active = false #array
cluster = 192.168.8.171, 192.168.8.170, 192.168.8.156 distance = 1896 temprature = 90.88 top_level = 9123456 max_conn = 68182 order = 98, 652, 31, 599, 566, 12, 208

示例代码:

package main

import (
"fmt" "github.com/yangeagle/config"
) type ConfigOption struct {
Hostname string `config:"host"`
Addr string `config:"ipaddr"`
PortNum int `config:"port"`
Height []float32 `config:"height"`
Active bool `config:"active"`
Clusters []string `config:"cluster"`
Dist int `config:"distance"`
Temp float64 `config:"temprature"`
TopLevel *int `config:"top_level"`
NumConn int `config:"max_conn"`
Order []int `config:"order"`
} const configFile = "simple.conf" func main() { confParser := config.NewConfig() err := confParser.ParseFile(configFile)
if err != nil {
fmt.Println("ParseFile failed:", err)
return
} confOption := new(ConfigOption) err = confParser.Unmarshal(confOption)
if err != nil {
fmt.Println("Unmarshal failed:", err)
return
} fmt.Println("Hostname:", confOption.Hostname)
fmt.Println("Addr:", confOption.Addr)
fmt.Println("Port:", confOption.PortNum)
fmt.Println("Height:", confOption.Height)
fmt.Println("Active:", confOption.Active)
fmt.Println("Clusters:", confOption.Clusters)
fmt.Println("Dist:", confOption.Dist)
fmt.Println("Temp:", confOption.Temp)
fmt.Println("TopLevel:", *confOption.TopLevel)
fmt.Println("NumConn:", confOption.NumConn)
fmt.Println("Order:", confOption.Order)
}

以上是配置解析模块代码库config使用方法,如果想了解更多,请访问项目地址:https://github.com/yangeagle/config

欢迎使用,如果你觉得不错,欢迎加星:)

golang 开源项目: 配置解析模块--config的更多相关文章

  1. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  2. .NET大型B2C开源项目nopcommerce解析——项目结构

    .NET大型B2C开源项目nopcommerce解析——项目结构 编写本文档是为了向程序员说明nopcommerce的解决方案结构,亦是程序员开发nopcommerce的居家必备良书.首先nopcom ...

  3. golang开源项目qor快速搭建网站qor-example运行实践

    最近想找几个基于Go语言开发的简单的开源项目学习下,分享给大家,github上有心人的收集的awesome-go项目集锦:github地址 发现一个Qor项目: Qor 是基于 Golang 开发的的 ...

  4. vue-cli的webpack模版项目配置解析

    上一篇文章已经分析了build/dev-server.js,里面使用到了其他config文件. 那么我们这篇文章,按着dev-server.js的使用顺序,来分析下其他文件. 首选,调用check-v ...

  5. Android开源项目xUtils HttpUtils模块分析(转)

    xUtils是github上的一个Android开源工具项目,其中HttpUtils模块是处理网络连接部分,刚好最近想整理下Android网络编程知识,今天学习下xUtils中HttpUtils. x ...

  6. Golang开源项目

    谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也 ...

  7. Android 开源项目android-open-project解析之(二) GridView,ImageView,ProgressBar,TextView

    五.GridView StaggeredGridView 同意非对齐行的GridView,类似Pinterest的瀑布流.而且跟ListView一样自带View缓存,继承自ViewGroup 项目地址 ...

  8. vue-cli的webpack模版项目配置解析-build/dev-server.js

    我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...

  9. Go语言(golang)开源项目大全

    转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析 ...

随机推荐

  1. simhash算法:海量千万级的数据去重

    simhash算法:海量千万级的数据去重 simhash算法及原理参考: 简单易懂讲解simhash算法 hash 哈希:https://blog.csdn.net/le_le_name/articl ...

  2. java的移位和异或运算

    Java移位运算种类 基础:我们知道在Java中int类型占32位,可以表示一个正数,也可以表示一个负数.正数换算成二进制后的最高位为0,负数的二进制最高为为1 例子: -5换算成二进制后为:1111 ...

  3. 使用OpenSSL生成RSA秘钥对并对文件加解密

    生成RSA私钥 openssl genrsa -out rsa.key 1024 生成RSA公钥 openssl rsa -in rsa.key -pubout -out pub.key 创建明文文件 ...

  4. 25、Nginx常见典型故障

    1.为什么nginx里面有的是浏览器渲染出的页面,有的时候就变成下载文件? 这个一个取决于服务端nginx,一个取决于你浏览器.在Nginx服务端的配置文件目录下,有一个mime.types 文件,内 ...

  5. 第二篇.2、python基础之字符编码

    一 了解字符编码的知识储备 一 计算机基础知识 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的 ...

  6. Linux部署java和tomcat的运行环境

    Linux部署java和tomcat的运行环境 1.上传下载的jdk的rpm包和tomcat的tar包,我是放到/opt目录了,文件直接去官网下载即可. 2.如果之前安装过其他版本的jdk,最好先现在 ...

  7. PyCharm上unittest 测试用例两种执行方式

    每次讲到unittest测试框架的时候,经常有同学在群里反映,为啥我的运行不是按照我往suite里添加的用例顺序执行的,为什么别人的能跑出来报告,我的就不行... 当然,首先确认代码是OK的,如果代码 ...

  8. C# 类的继承和访问

    学习笔记------类的继承和访问: class MyBaseClass { public void PrintSun(){ Console.WriteLine("base111111111 ...

  9. 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...

  10. Linux修改mysql配置文件

    1.首先需要知道mysql数据库安装在什么位置 2.查找配置文件位置 然后在根据这个目录,查看配置文件在哪里了(路径后面加上 --verbose --help|grep -A 1 'Default o ...