在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. X-Forwarded-For伪造及防御

    使用x-Forward_for插件或者burpsuit可以改包,伪造任意的IP地址,使一些管理员后台绕过对IP地址限制的访问. 防护策略: 1.对于直接使用的 Web 应用,必须使用从TCP连接中得到 ...

  2. LRU算法介绍和在JAVA的实现及源码分析

    一.写随笔的原因:最近准备去朋友公司面试,他说让我看一下LRU算法,就此整理一下,方便以后的复习. 二.具体的内容: 1.简介: LRU是Least Recently Used的缩写,即最近最少使用. ...

  3. centos8 网卡命令(centos7也可用)

    nmcli n 查看nmcli状态 nmcli n on 启动nmcli nmcli c  up eth0 启动网卡eth0 nmcli c down eth0 关闭网卡eth0 nmcli d c ...

  4. maven 学习之路一

    一.mave介绍: maven :我的理解就是一个代码构建管理的一个工具.类似的工具有gradle,ant等. 官方理解:Apache Maven is a software project mana ...

  5. iptables 设置特定IP访问指定端口

    一.添加规则:设置禁止所有IP访问指定端口8075 [root@zabbix_server ~]# iptables -I INPUT -p tcp --dport -j DROP 二.测试telne ...

  6. 怎么去掉zencart模板网址后面的zenid=数字这个东西

    搜索引擎优化后第一次进入商店网址URL后面会出现zenid=XXXX 如:http://afish.cnblogs.com/zencart-zenid.html?zenid=tbisz675099db ...

  7. PHP+redis消息队列抢购实现

    实现功能: 1. 基于redis队列,防止高并发的超卖 2. 基于mysql的事务加排它锁,防止高并发的超卖 基于redis队列工作流程: 1. 管理员根据goods表中的库存,创建redis商品库存 ...

  8. 阿里云-docker安装mysql

    1.检查内核版本,必须是3.10及以上 uname ‐r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker:service docker start ...

  9. 第四章 生命周期函数--36 结合Node手写JSONP服务器剖析JSONP原理

  10. bash配置相关

    登录方式 登录方式分为两种方式: