golang解析ini风格配置文件插件库mini的使用

Golang解析INI风格配置文件插件库mini的使用

Mini是一个简单的INI配置文件解析器,支持标准的INI文件格式。

功能特性

  • 支持标准的name=value格式
  • 支持以#或;开头的注释行
  • 支持空行
  • 支持[sectionname]标记的节
  • 支持分割节,可以在多个位置使用相同的节名
  • 支持编码字符串,包含\n、\t等转义字符
  • 支持数组值,使用重复的key[]=value形式
  • 支持全局键值对(出现在第一个节之前)

安装

go get github.com/sasbury/mini

使用示例

下面是一个完整的示例,展示如何使用mini库解析INI配置文件:

package main

import (
	"fmt"
	"log"

	"github.com/sasbury/mini"
)

func main() {
	// 示例INI文件内容
	iniContent := `
# 这是一个注释
global_key = global_value

[database]
host = 127.0.0.1
port = 3306
username = root
password = secret
features[] = replication
features[] = backup

[server]
address = 192.168.1.100
port = 8080
`

	// 解析INI内容
	cfg, err := mini.LoadConfigurationFromString(iniContent)
	if err != nil {
		log.Fatal(err)
	}

	// 获取全局值
	fmt.Println("Global key:", cfg.String("global_key", ""))

	// 获取数据库节的值
	dbSection := cfg.Section("database")
	fmt.Println("DB Host:", dbSection.String("host", ""))
	fmt.Println("DB Port:", dbSection.Int("port", 0))
	
	// 获取数组值
	features := dbSection.Array("features")
	fmt.Println("DB Features:", features)

	// 获取服务器节的值
	serverSection := cfg.Section("server")
	fmt.Println("Server Address:", serverSection.String("address", ""))
	fmt.Println("Server Port:", serverSection.Int("port", 0))
}

从文件加载配置

package main

import (
	"fmt"
	"log"

	"github.com/sasbury/mini"
)

func main() {
	// 从文件加载配置
	cfg, err := mini.LoadConfiguration("/path/to/config.ini")
	if err != nil {
		log.Fatal(err)
	}

	// 获取配置值
	section := cfg.Section("section_name")
	value := section.String("key_name", "default_value")
	fmt.Println("Value:", value)
}

方法说明

  • LoadConfiguration(filename string) - 从文件加载配置
  • LoadConfigurationFromString(content string) - 从字符串加载配置
  • Section(name string) - 获取指定节
  • String(key, defaultValue string) - 获取字符串值
  • Int(key string, defaultValue int) - 获取整数值
  • Bool(key string, defaultValue bool) - 获取布尔值
  • Array(key string) - 获取数组值

Mini库提供了简单直观的API来解析和访问INI格式的配置文件,适合大多数配置文件的处理需求。


更多关于golang解析ini风格配置文件插件库mini的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang解析ini风格配置文件插件库mini的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用mini库解析INI风格配置文件

mini是一个轻量级的Go语言INI配置文件解析库,它提供了简单易用的API来读取和操作INI格式的配置文件。下面我将详细介绍如何使用mini库。

安装mini库

首先需要安装mini库:

go get github.com/go-ini/ini

基本使用方法

1. 加载INI文件

package main

import (
	"fmt"
	"log"
	
	"gopkg.in/ini.v1"
)

func main() {
	cfg, err := ini.Load("my.ini")
	if err != nil {
		log.Fatalf("Fail to read file: %v", err)
	}
	
	// 获取默认分区(section)的值
	fmt.Println("App Mode:", cfg.Section("").Key("app_mode").String())
	
	// 获取指定分区的值
	fmt.Println("Data Path:", cfg.Section("paths").Key("data").String())
}

2. 读取不同类型的值

mini支持自动类型转换:

// 读取字符串
val := cfg.Section("section").Key("key").String()

// 读取整数
num, err := cfg.Section("section").Key("key").Int()

// 读取布尔值
flag, err := cfg.Section("section").Key("key").Bool()

// 读取浮点数
f, err := cfg.Section("section").Key("key").Float64()

3. 检查键是否存在

if cfg.Section("section").HasKey("key") {
	// 键存在
}

4. 获取所有分区和键

// 获取所有分区
sections := cfg.Sections()
for _, section := range sections {
	fmt.Println("Section:", section.Name())
	
	// 获取分区下所有键
	keys := section.Keys()
	for _, key := range keys {
		fmt.Printf("%s = %s\n", key.Name(), key.Value())
	}
}

高级功能

1. 设置默认值

value := cfg.Section("section").Key("key").MustString("default_value")

2. 修改和保存配置

// 修改值
cfg.Section("section").Key("key").SetValue("new_value")

// 添加新分区和键
cfg.Section("new_section").Key("new_key").SetValue("value")

// 保存到文件
err = cfg.SaveTo("my.ini")
if err != nil {
	log.Fatal(err)
}

3. 结构体映射

mini支持将配置映射到结构体:

type ServerConfig struct {
	Port     int    `ini:"port"`
	Host     string `ini:"host"`
	LogLevel string `ini:"log_level"`
}

func main() {
	cfg, err := ini.Load("server.ini")
	if err != nil {
		log.Fatal(err)
	}
	
	var server ServerConfig
	err = cfg.Section("server").MapTo(&server)
	if err != nil {
		log.Fatal(err)
	}
	
	fmt.Printf("Server config: %+v\n", server)
}

4. 从字符串加载配置

data := `
app_mode = development

[server]
port = 8080
`

cfg, err := ini.Load([]byte(data))
if err != nil {
	log.Fatal(err)
}

实际示例

下面是一个完整的示例,展示如何读取和修改INI配置文件:

package main

import (
	"fmt"
	"log"
	
	"gopkg.in/ini.v1"
)

func main() {
	// 加载或创建配置文件
	cfg, err := ini.Load("config.ini")
	if err != nil {
		fmt.Println("配置文件不存在,将创建新文件")
		cfg = ini.Empty()
	}
	
	// 确保有默认分区
	if _, err := cfg.GetSection(""); err != nil {
		_, err = cfg.NewSection("")
		if err != nil {
			log.Fatal(err)
		}
	}
	
	// 设置默认值
	cfg.Section("").Key("app_name").SetValue("My Awesome App")
	cfg.Section("").Key("version").SetValue("1.0.0")
	
	// 确保有database分区
	if _, err := cfg.GetSection("database"); err != nil {
		_, err = cfg.NewSection("database")
		if err != nil {
			log.Fatal(err)
		}
	}
	
	// 设置数据库配置
	cfg.Section("database").Key("host").SetValue("localhost")
	cfg.Section("database").Key("port").SetValue("3306")
	cfg.Section("database").Key("username").SetValue("root")
	cfg.Section("database").Key("password").SetValue("secret")
	
	// 保存配置
	err = cfg.SaveTo("config.ini")
	if err != nil {
		log.Fatal(err)
	}
	
	fmt.Println("配置文件已保存")
	
	// 读取配置
	host := cfg.Section("database").Key("host").String()
	port := cfg.Section("database").Key("port").MustInt(3306)
	
	fmt.Printf("数据库配置: host=%s, port=%d\n", host, port)
}

总结

mini库提供了以下主要功能:

  1. 加载和解析INI格式文件
  2. 支持多种数据类型读取
  3. 支持配置修改和保存
  4. 支持结构体映射
  5. 轻量级且API简单易用

对于需要处理INI配置文件的Go项目,mini是一个非常好的选择,它既简单又功能齐全,能够满足大多数配置管理的需求。

回到顶部