golang插件viper

本文介绍了如何在Golang项目中使用Viper库来管理配置,包括从环境变量读取`CORE_SECURITY_ENABLED`并获取其布尔值,以及解析`core.yaml`配置文件。通过例子展示了Viper的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用到包"github.com/spf13/viper"
1. 启动命令 CORE_SECURITY_ENABLED=true vip
在代码中通过environment := viper.GetBool(“security.enabled”)
可得到environment的值为true
2. 读取配置文件,配置文件结构如下core.yaml

statetransfer:

    # Should a replica attempt to fix damaged blocks?
    # In general, this should be set to true, setting to false will cause
    # the replica to panic, and require a human's intervention to intervene
    # and fix the corruption
    recoverdamage: true

    # The number of blocks to retrieve per sync request
    blocksperrequest: 20

    # The maximum number of state deltas to attempt to retrieve
    # If more than this number of deltas is required to play the state up to date
    # then instead the state will be flagged as invalid, and a full copy of the state
    # will be retrieved instead
    maxdeltas: 200

    # Timeouts
    timeout:

        # How long may returning a single block take
        singleblock: 2s

        # How long may returning a single state delta take
        singlestatedelta: 2s

        # How long may transferring the complete state take
        fullstate: 60s
peer:
    abcd:   3322d
3.  一言不合上代码,获取第一条所说的环境参数的值和第二条配置文件中的值
package main

import (
        "fmt"
        "os"
        "path/filepath"

        "strings"

        "github.com/spf13/viper"
)

const cmdRoot = "core"

func main() {
        viper.SetEnvPrefix(cmdRoot)
        viper.AutomaticEnv()
        replacer := strings.NewReplacer(".", "_")
        viper.SetEnvKeyReplacer(replacer)
        viper.SetConfigName(cmdRoot)
        viper.AddConfigPath("./")
        gopath := os.Getenv("GOPATH")
        for _, p := range filepath.SplitList(gopath) {
                peerpath := filepath.Join(p, "src/vip")
                viper.AddConfigPath(peerpath)
        }
        err := viper.ReadInConfig() // Find and read the config file
        if err != nil {             // Handle errors reading the config file
                fmt.Println(fmt.Errorf("Fatal error when reading %s config file: %s\n", cmdRoot, err))
        }
        environment := viper.GetBool("security.enabled")
        fmt.Println("environment:", environment)

        fullstate := viper.GetString("statetransfer.timeout.fullstate")
        fmt.Println("fullstate:", fullstate)

        abcdValuea := viper.GetString("peer.abcd")
        fmt.Println("abcdValuea is:", abcdValuea)

}
    4.  运行代码
>>go build
>>CORE_SECURITY_ENABLED=true vip
>>environment: true
fullstate: 60s
abcdValuea is: 3322d

学会了吗?
不要企图爱上哥,哥只是个传说!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值