golang:viper读取修改配置文件

前言

viper 支持Yaml、Json、 TOML、HCL 等格式,读取非常的方便。

安装

go get github.com/spf13/viper

demo

在这里插入图片描述
config.yaml:

TimeStamp: "2018-10-18 10:09:23"
Address: "Shenzhen"
Postcode: 518000
CompanyInfomation:
  Name: "Sunny"
  MarketCapitalization: 50000000
  EmployeeNum: 200
  Department:
    - "Finance"
    - "Design"
    - "Program"
    - "Sales"
  IsOpen: false

main.go

package main

import (
	"fmt"
	"github.com/spf13/viper"
)

func main(){
	v := viper.New()
	v.SetConfigName("config") //文件名
	v.AddConfigPath("./aTest/config") // 路径
	//windows环境下为%GOPATH,linux环境下为$GOPATH
	//v.AddConfigPath("%GOPATH/src/")
	//设置配置文件类型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig();err != nil {
		fmt.Printf("err:%s\n",err)
	}
	fmt.Printf(
		`
		TimeStamp:%s
		CompanyInfomation.Name:%s
		CompanyInfomation.Department:%s `,
		v.Get("TimeStamp"),
		v.Get("CompanyInfomation.Name"),
		v.Get("CompanyInfomation.Department"),
	)

	/*
		result:
		TimeStamp:2018-10-18 10:09:23
		CompanyInfomation.Name:Sunny
		CompanyInfomation.Department:[Finance Design Program Sales]
	*/
}
### 回答1: 你可以使用 Viper 包来读取 INI 配置文件。这是一个简单的例子,假设你的 INI 配置文件看起来像这样: ```ini [server] id = 1 address = 127.0.0.1 username = user1 password = pass1 [server.services] id = 1 name = service1 param1 = value1 param2 = value2 [server.services] id = 2 name = service2 param1 = value3 param2 = value4 ``` 你可以使用以下代码来读取配置文件: ```go package main import ( "fmt" "github.com/spf13/viper" ) type ServerConfig struct { ID int Address string Username string Password string Services []struct { ID int Name string Params map[string]string } } func main() { viper.SetConfigType("ini") // 读取配置文件 viper.SetConfigName("config") viper.AddConfigPath(".") err := viper.ReadInConfig() if err != nil { fmt.Println("Error reading config file, %s", err) } // 将配置文件映射到结构体 var config ServerConfig err = viper.Unmarshal(&config) if err != nil { fmt.Println("Error unmarshalling config: %s", err) } // 使用配置信息 fmt.Println("Server ID:", config.ID) fmt.Println("Server address:", config.Address) fmt.Println("Username:", config.Username) fmt.Println("Password:", config.Password) fmt.Println("Number of services:", len(config.Services)) for _, service := range config.Services { fmt.Println("Service ID:", service.ID) fmt.Println("Service name:", service.Name) fmt.Println("Service params:", service.Params) } } ``` 在这个例子中,我们使用了 Viper 的 `SetConfigType` 函数来设置配置文件的类型,然后使用 `SetConfigName` 和 `AddConfigPath` 函数来指定配置文 ### 回答2: 使用golangviper库可以方便地读取ini配置文件。如果配置文件中包含多个服务器信息,可以按照以下格式构建ini文件。 参考的ini文件: ``` [server1] id = 1 address = 192.168.0.1 username = user1 password = pass1 services = service1, service2 [server2] id = 2 address = 192.168.0.2 username = user2 password = pass2 services = service3 [service1] id = 1 param1 = value1 param2 = value2 [service2] id = 2 param1 = value3 param2 = value4 [service3] id = 3 param1 = value5 ``` 要使用viper读取这样的配置文件,首先需要在代码中导入viper库。 ```golang import ( "fmt" "github.com/spf13/viper" ) ``` 然后在代码中初始化viper并指定要读取配置文件。 ```golang func main() { viper.SetConfigName("config") viper.SetConfigType("ini") viper.AddConfigPath(".") err := viper.ReadInConfig() if err != nil { fmt.Println("Error reading config file:", err) return } } ``` 接下来可以通过viper获取特定的配置项。 ```golang func main() { // ... server1ID := viper.GetInt("server1.id") server1Addr := viper.GetString("server1.address") server1User := viper.GetString("server1.username") server1Pass := viper.GetString("server1.password") server1Services := viper.GetStringSlice("server1.services") service1ID := viper.GetInt("service1.id") service1Param1 := viper.GetString("service1.param1") service1Param2 := viper.GetString("service1.param2") // ... } ``` 使用上述方法,可以从ini文件中读取每个服务器的ID、访问地址、用户名、密码以及所包含的服务。对于每个服务还可以获取特定的参数。 以上是使用golangviper读取ini配置文件的简单示例。使用viper库可以方便地读取和处理ini文件的配置信息。但需要注意的是,ini文件的格式必须符合viper的要求,才能正确读取配置项。 ### 回答3: 使用golang viper读取ini配置文件的步骤如下: 1. 首先,需要安装viper库,可以使用以下命令进行安装: ``` go get github.com/spf13/viper ``` 2. 创建一个配置文件,例如config.ini,配置文件内容如下所示: ```ini [server1] id = 1 address = example.com username = user1 password = pass1 services = service1, service2 [server2] id = 2 address = example2.com username = user2 password = pass2 services = service3 [service1] id = 1 param1 = value1 param2 = value2 [service2] id = 2 param1 = value3 [service3] id = 3 param1 = value4 ``` 3. 在Go代码中,导入viper库,并加载配置文件: ```go import ( "fmt" "github.com/spf13/viper" ) func main() { // 加载配置文件 viper.SetConfigFile("config.ini") if err := viper.ReadInConfig(); err != nil { fmt.Printf("无法加载配置文件: %s\n", err) } } ``` 4. 使用viper读取服务器配置: ```go func main() { // 加载配置文件 viper.SetConfigFile("config.ini") if err := viper.ReadInConfig(); err != nil { fmt.Printf("无法加载配置文件: %s\n", err) } // 读取服务器配置 serverID := viper.GetString("server1.id") address := viper.GetString("server1.address") username := viper.GetString("server1.username") password := viper.GetString("server1.password") services := viper.GetStringSlice("server1.services") fmt.Printf("服务器ID: %s\n", serverID) fmt.Printf("地址: %s\n", address) fmt.Printf("用户名: %s\n", username) fmt.Printf("密码: %s\n", password) for _, service := range services { serviceID := viper.GetString(service + ".id") param1 := viper.GetString(service + ".param1") fmt.Printf("服务ID: %s\n", serviceID) fmt.Printf("服务参数1: %s\n", param1) } } ``` 这样,就可以使用golang viper读取ini配置文件,并提取要求的各项服务器信息和服务参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值