热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang使用模板新增文件_golang开发:类库篇(四)配置文件解析器goconfig的使用

###为什么要使用goconfig解析配置文件目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置ÿ
12b0ffeecaac59015390e14f72024f15.png

### 为什么要使用goconfig解析配置文件

目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置,然后通过环境变量去获取该环境下的变量。例如,生产环境跟测试环境使用同一份配置,但是相应的环境下的变量的值是不一样的,通过环境获其取对应的的key value。没明白没关系,举例子的时候就明白了。

PHP的框架yaf。golang的框架beego。对配置的书写和解析基本都是一致的。

看下goconfig的解释

*goconfig 是一个易于使用,支持注释的 Go 语言配置文件解析器,该文件的书写格式和 Windows 下的 INI 文件一样。

配置文件由形为 [section] 的节构成,内部使用 name:value 或 name=value 这样的键值对;每行开头和尾部的空白符号都将被忽略;如果未指定任何节,则会默认放入名为 DEFAULT 的节当中;可以使用 “;” 或 “#” 来作为注释的开头,并可以放置于任意的单独一行中。*

举个栗子一目了然

### 怎么使用 goconfig

先写一个常用的配置conf.ini

```

;redis cache

USER_LIST = USER:LIST

MAX_COUNT = 50

MAX_PRICE = 123456

IS_SHOW = true

[test]

dbdns = root:@tcp(127.0.0.1:3306)

[prod]

dbdns = root:@tcp(172.168.1.1:3306)

```

然后我们读取这个配置

```

package main

import (

"log"

"Unknwon/goconfig"

"fmt"

)

func main() {

cfg, err := goconfig.LoadConfigFile("./conf.ini")

if err != nil {

log.Fatalf("无法加载配置文件:%s", err)

}

userListKey, err := cfg.GetValue("","USER_LIST")

if err != nil {

fmt.Println(err.Error())

}

fmt.Println(userListKey)

userListKey2,_ := cfg.GetValue(goconfig.DEFAULT_SECTION, "USER_LIST")

fmt.Println(userListKey2)

maxCount := cfg.MustInt("","MAX_COUNT")

fmt.Println(maxCount)

maxPrice := cfg.MustFloat64("","MAX_PRICE")

fmt.Println(maxPrice)

isShow := cfg.MustBool("","IS_SHOW")

fmt.Println(isShow)

db := cfg.MustValue("test","dbdns")

fmt.Println(db)

dbProd := cfg.MustValue("prod","dbdns")

fmt.Println(dbProd)

//set 值

cfg.SetValue("","MAX_NEW","10")

maxNew := cfg.MustInt("","MAX_NEW")

fmt.Println(maxNew)

maxNew1,err := cfg.Int("","MAX_NEW")

if err != nil {

fmt.Println(err.Error())

}

fmt.Println(maxNew1)

}

cfg.DeleteKey("", "MAX_NEW")

```

执行下结果

```

go build -o test.bin

./test.bin

USER:LIST

USER:LIST

50

123456

true

root:@tcp(127.0.0.1:3306)

root:@tcp(172.168.1.1:3306)

10

10

```

跟预想的结果一致。

文档上把用法讲的很清楚

*函数 LoadConfigFile 加载一个或多个文件,然后返回一个类型为 ConfigFile 的变量。

GetValue 可以简单的获取某个值。

像 Bool、Int、Int64 这样的方法会直接返回指定类型的值。

以 Must 开头的方法不会返回错误,但当错误发生时会返回零值。

SetValue 可以设置某个值。

DeleteKey 可以删除某个键。

最后,SaveConfigFile 可以保持您的配置到本地文件系统。

使用方法 Reload 可以重载您的配置文件。*

几个注意的地方

1.配置符号可以使用=,也可以使用 :

2.section的部分可以设置一个系统常量,测试环境的值是test,生产环境的值是prod,就不用调用的时候区别环境变量。

cfg.MustValue(ENV,"dbdns")

如果需要了解更详细的使用,看下文档

Unknwon/goconfig



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • MongoDB集群配置:副本集与分片详解
    本文详细介绍了如何在MongoDB中配置副本集(Replica Sets)和分片(Sharding),并提供了具体的步骤和命令,帮助读者理解并实现高可用性和水平扩展的MongoDB集群。 ... [详细]
author-avatar
rhp3465483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有