面试题答案
一键面试设计思路
- 读取环境变量:使用
os.Getenv
函数获取NODE_TYPE
和CONFIG_PATH
环境变量的值。 - 判断节点类型:根据
NODE_TYPE
的值来决定是master
还是slave
节点,进而确定使用哪个配置文件路径。 - 并发安全:为了保证在高并发情况下环境变量读取和配置加载的一致性,可以使用
sync.Once
来确保配置只加载一次。同时,在读取环境变量时,可以考虑将读取结果缓存起来,避免每次都从操作系统获取,提升性能。
核心代码片段
package main
import (
"fmt"
"os"
"sync"
)
var (
nodeType string
configPath string
once sync.Once
config map[string]interface{}
)
func loadConfig() {
nodeType = os.Getenv("NODE_TYPE")
configPath = os.Getenv("CONFIG_PATH")
// 这里根据nodeType和configPath加载实际的配置文件,例如使用viper库
// 这里简单模拟配置加载
config = make(map[string]interface{})
config["node_type"] = nodeType
config["config_path"] = configPath
}
func getConfig() map[string]interface{} {
once.Do(loadConfig)
return config
}
可以在其他地方通过调用 getConfig
函数来获取配置:
func main() {
result := getConfig()
fmt.Println(result)
}