在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. CentOS7 SVN基本配置

    开机自启指令如下 systemctl enable svnserve.service 对应可执行脚本文件路径 vim /etc/sysconfig/svnserve 查看状态: ps -ef|grep ...

  2. jquery 知识整理

    大纲一.jQuery简介 二.jQuery 和Dom关系及jQuery版本 1.jQuery版本 2.jQuery和Dom转换 三.jQuery 选择器 1.1.基本 1.2.层级 2.基本筛选器 3 ...

  3. ValueError: day is out of range for month

    日期超出范围. 我当时使用datetime模块生成时间格式数据,手误传错参数导致的结果.所以,好好检查数据就可解决问题. 如下: # 将字符串类型数据转化成时间结构数据# 原想写成如下代码import ...

  4. 修改linux系统TCP连接数

    修改linux系统TCP连接数 centOS 6.x (1)vi /etc/sysctl.conf (2)添加参数 net.nf_conntrack_max = 655360 (3)sysctl -p ...

  5. PAT Basic 1007 素数对猜想 (20 分)

    让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素 ...

  6. C#和Java的最大不同

    本文摘抄自知乎. 作者:匿名用户链接:https://www.zhihu.com/question/20451584/answer/27163009来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...

  7. Linux VPS 常用重启命令

    重启vps:reboot CentOS重启ssh:/etc/init.d/sshd restart Debian/Ubuntu重启ssh:/etc/init.d/ssh restart 重启Lnmp: ...

  8. Nginx 的简介

    1. 什么是 nginx :Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数.  2. 正向代理 ...

  9. 4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (20 分)中的一些问题

    1.Employee类的equals 由于题目要求//首先调用父类的equals方法,如果返回true.再比较company与salary.//比较salary属性时,使用DecimalFormat ...

  10. arm开发板make编译时遇到 make[2]:*** [s-attrtab] 已杀死 问题的解决方案

    未验证 出现“make[2]: *** [s-attrtab] 已杀死”log 是由于内存不足 解决方案 增加swapfile 步骤如下: 1. 查看当前swapfile状态 root@ubuntu: ...