Golang——使用yaml配置文件
之前一直从事java开发,习惯了使用yaml文件的格式,尤其是清晰的层次结构、注释。抱着好奇心以及对golang的看好开始学习golang,逐渐喜欢上了这门语言,也尝试着在项目中使用golang,当然编程必定涉及到配置,go程序依然如此,自然而然首选yaml配置。
一、安装依赖、
在选择之前也了解过各类yaml解析库,最终选择go-yaml包。地址:go-yaml
go get gopkg.in/yaml.v2
二、config.yaml
channel:
#亿美-催还款账号信息
emayReminder:
userId: abcd
userPws: abcd
url: http://bjmtn.b2m.cn:80/inter/getBalance
threshold: 10000
#国都短信账号信息
guodu:
userId: dddd
userPws: sssss
keyStr: dddddd
url: http://221.179.180.158:8081/QxtSms_surplus/surplus
threshold: 10000
三、读取配置文件ChannelConfig.go
读取yaml与读取json的方式,需要根据层级定义struct。
package util
import (
"io/ioutil"
"log"
"gopkg.in/yaml.v2"
)
var configFile []byte
type ChannelConfig struct {
Channel Channel `yaml:"channel"`
}
type Channel struct {
EmayReminderConfig EmayReminder `yaml:"emayReminder"`
GuoduConfig Guodu `yaml:"guodu"`
}
type EmayReminder struct {
UserId string `yaml:"userId"`
UserPws string `yaml:"userPws"`
Url string `yaml:"url"`
Threshold string `yaml:"threshold"`
}
type Guodu struct {
UserId string `yaml:"userId"`
UserPws string `yaml:"userPws"`
Url string `yaml:"url"`
KeyStr string `yaml:"keyStr"`
Threshold string `yaml:"threshold"`
}
func GetChannelConfig() (e *ChannelConfig, err error) {
err = yaml.Unmarshal(configFile, &e)
return e, err
}
func init() {
var err error;
configFile, err = ioutil.ReadFile("resource/config.yaml")
if err != nil {
log.Fatalf("yamlFile.Get err %v ", err)
}
}
四、测试main.go
package main
import (
"github.com/KarenLKL/Balance/route"
"net/http"
"github.com/KarenLKL/Balance/util"
"log"
"fmt"
)
func main() {
router := route.NewRouter()
config, err := util.GetChannelConfig()
if err != nil {
log.Printf("get emayReminder channel config faild! err: #%v", err)
}
fmt.Println(config)
http.ListenAndServe(":8888", router)
}
用问题的地方,请您指正 ^_^