用到包"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
学会了吗?
不要企图爱上哥,哥只是个传说!