golang插件viper

用到包"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

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

你可能感兴趣的:(go插件)