介绍一款超方便的Go语言INI解析器:wego/wini

介绍

wego/wini是一款GO语言版本的ini配置文件解析工具,wego/wini具有以下特征:

  1. 提供了GetString、GetInt…以及MustrString、MustInt…函数,方便配置数据的获取。
  2. 支持通过struct的tag来自动将配置数据赋值给struct的字段。
  3. 支持使用环境变量配置项的值。

安装

go get github.com/haming123/wego/wini

快速上手

首先准备app.conf配置文件:

#应用名称
app_name = demo
#日志级别: 0 OFF 1 FATAL 2 ERROR 3 WARN 4 INFO 5 DEBUG
level = 5
#获取环境变量
go_path = ${GOPATH}

[mysql]
db_name = demodb
db_host = 127.0.0.1:3306
db_user = root
db_pwd = demopwd

接下看看如何读取配置文件,并获取配置项的值:

package main
import (
	"fmt"
	"github.com/haming123/wego/wini"
)
func main()  {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app.conf", &cfg)
	if err != nil {
		fmt.Println(err)
		return
	}

	//通过GetXXX获取配置项的值
	val := cfg.GetString("app_name")
	if val.Error != nil {
		fmt.Println( val.Error)
		return
	}
	fmt.Println(val.Value)
}

读取Section中的配置项

ini 文件是以分区(section)组织的。分区以[name]开始,在下一个分区前结束。所有分区前的内容属于默认分区([root])。以下代码是section配置项的读取示例:

func TestSectionGet(t *testing.T) {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app.conf", &cfg)
	if err != nil {
		t.Error(err)
		return
	}

	//通过GetXXX获取配置项的值
	val := cfg.Section("mysql").GetString("db_name")
	if val.Error != nil {
		t.Error(err)
		return
	}
	t.Log(val.Value)
}

各种类型的数据的读取

为了方便各种类型的配置数据的获取, wego/wini提供了GetString、GetInt…等函数,例如以下配置文件的读取:

#各种数据类型的配置项
str_value = hello
bool_value = true
int_value = 99
float_value = 123.45
func TestIniGetXXX(t *testing.T) {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app2.conf", &cfg)
	if err != nil {
		t.Error(err)
		return
	}

	val := cfg.GetString("str_value")
	if val.Error != nil {
		t.Error(val.Error)
		return
	}
	t.Log(val.Value)

	val_bool := cfg.GetString("bool_value")
	if val.Error != nil {
		t.Error(val_bool.Error)
		return
	}
	t.Log(val_bool.Value)

	val_int := cfg.GetString("int_value")
	if val.Error != nil {
		t.Error(val_int.Error)
		return
	}
	t.Log(val_int.Value)

	val_float := cfg.GetString("float_value")
	if val.Error != nil {
		t.Error(val_float.Error)
		return
	}
	t.Log(val_float.Value)
}

数据的快捷读取

使用GetXXX函数读取配置项需要进行错误判断,这样的代码写起来会非常繁琐。为此,wego/wini提供对应的MustXXX方法,这个方法只返回一个值,
同时它可接受缺省参数,如果没有配置对应的配置项或配置内容无法转换,则使用缺省值作为返回值。

func TestIniMustXXX(t *testing.T) {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app2.conf", &cfg)
	if err != nil {
		t.Error(err)
		return
	}

	t.Log(cfg.MustString("str_value"))
	t.Log(cfg.MustBool("bool_value"))
	t.Log(cfg.MustInt("int_value"))
	t.Log(cfg.MustFloat("float_value"))
}
数组类型数据的读取

wego/wini也支持数组类型数据的读取,要求:数组要作为一个配置项添加到ini文件中,并且数组成员之间用指定的分隔符(例如“,”)分隔:

#数组配置项
ints_value = 1,2,3,4,5
func TestGetArray(t *testing.T) {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app2.conf", &cfg)
	if err != nil {
		t.Error(err)
		return
	}

	arr, err := cfg.GetInts("ints_value", ",")
	if err != nil {
		t.Error(err)
		return
	}
	t.Log(arr)
}
结构体字段映射与数据的读取

wego/wini持通过struct的tag来获取struct字段与配置项的映射关系,并可以通过映射关系自动给struct字段赋值,首先需要在struct定义中指定映射关系:

type DbConfig struct {
	MysqlHost 	string 		`ini:"db_host"`
	MysqlUser 	string 		`ini:"db_user"`
	MysqlPwd  	string 		`ini:"db_pwd"`
	MysqlDb   	string 		`ini:"db_name"`
}

type AppConfig struct {
	AppName  	string   	`ini:"app_name"`
	HttpPort	uint     	`ini:"http_port;default=8080"`
	GoPath   	string   	`ini:"go_path"`
	DbParam  	DbConfig 	`ini:"mysql"`
}

说明:
wego/wini的定义映射关系时支持配置缺省值,再进行数据解析时若没有配置内容,则使用缺省值作为字段的值。
wego/wini使用GetStruct来struct字段赋值,例如:

func TestIniGetStruct(t *testing.T) {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app.conf", &cfg)
	if err != nil {
		t.Error(err)
		return
	}

	var data AppConfig
	err = cfg.GetStruct(&data)
	if err != nil {
		t.Error(err)
		return
	}
	t.Log(data)
}

也可以调用Section的GetStruct函数直接从section中获取配置内容,例如:

func TestIniGetSectionStruct(t *testing.T) {
	var cfg wini.ConfigData
	err := wini.ParseFile("./app.conf", &cfg)
	if err != nil {
		t.Error(err)
		return
	}

	var data DbConfig
	err = cfg.Section("mysql").GetStruct(&data)
	if err != nil {
		t.Error(err)
		return
	}
	t.Log(data)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue Splide是一款用TypeScript编写的轻量级轮播图组件,它没有任何依赖,代码简单清晰,体积小巧。它提供了多种轮播组合,包括单图轮播、N图轮播、聚焦轮播、分页轮播、垂直轮播等。它的轮播过程动画非常细腻,滑动效果流畅顺滑,末尾图片反弹效果也很流畅。\[1\] 在Vue3中使用Vue Splide进行轮播图滑动无缝的配置步骤如下: 第一步:安装配置 在main.ts文件中,使用以下代码安装Vue Splide: ```javascript import { createApp } from 'vue' import VueSplide from '@splidejs/vue-splide' const app = createApp(App) app.use(VueSplide) ``` 第二步:在Demo.vue文件中使用Vue Splide进行轮播图滑动无缝的示例代码如下: ```html <template> <Splide :options="{ rewind: true }"> <SplideSlide> <img src="http://localhost:9090/wego/ad/c1.jpg"> </SplideSlide> <SplideSlide> <img src="http://localhost:9090/wego/ad/c2.jpg"> </SplideSlide> <SplideSlide> <img src="http://localhost:9090/wego/ad/c3.jpg"> </SplideSlide> <SplideSlide> <img src="http://localhost:9090/wego/ad/c4.jpg"> </SplideSlide> <SplideSlide> <img src="http://localhost:9090/wego/ad/c5.jpg"> </SplideSlide> </Splide> </template> <script lang="ts" setup> import { Splide, SplideSlide } from '@splidejs/vue-splide' import '@splidejs/splide/dist/css/themes/splide-default.min.css' </script> ``` 以上是在Vue3中使用Vue Splide进行轮播图滑动无缝的配置和示例代码。你可以根据自己的需求进行相应的修改和定制。 #### 引用[.reference_title] - *1* *2* [Vue3轮播图插件 vue-splide](https://blog.csdn.net/lianghecai52171314/article/details/125818392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go lang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值