先上代碼
viper讀取配置文件代碼
//viper讀取配置文件
func InitConfig() {
//獲得當(dāng)前的工作目錄
workDir, _ := os.Getwd()
//設(shè)置文件路徑
viper.AddConfigPath(workDir + "/yml")
//設(shè)置讀取的文件名
viper.SetConfigName("application")
//設(shè)置要讀取的文件類(lèi)型
viper.SetConfigType("yml")
//處理讀取文件時(shí)的錯(cuò)誤
err := viper.ReadInConfig()
if err != nil {
panic(err)
}
}
打包后viper讀取配置文件代碼
//viper讀取配置文件
func InitConfig() {
//從打包后的文件中讀取配置
bytesContent, err := data.Asset("yml/application.yml")
if err != nil {
panic("Asset() can not found setting file")
}
//設(shè)置要讀取的文件類(lèi)型
viper.SetConfigType("yml")
//讀取
viper.ReadConfig(bytes.NewBuffer(bytesContent))
}
一、安裝 go-bindata:
go get -u github.com/jteeuwen/go-bindata/...
注意 go get 地址最后的三個(gè)點(diǎn) ...。這樣會(huì)分析所有子目錄并下載依賴編譯子目錄內(nèi)容。go-bindata 的命令工具在子目錄中。(還要記得把 $GOPATH/bin 加入系統(tǒng) PATH)。
二、使用命令工具 go-bindata
go-bindata -o=data/data.go -pkg=data yml/...
-o 輸出文件到 data/data.go,包名 -pkg=data,然后是需要打包的目錄,為yml文件夾,三個(gè)點(diǎn)包括所有子目錄。這樣就可以把yml下所有相關(guān)文件打包到data.go。
三、實(shí)例
yml包下application文件
datasource:
driverName: mysql
host: localhost
port: 3306
database: security
username: root
password: 123456
charset: utf8
main.go文件
package main
import (
"bytes"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/spf13/viper"
"log"
"xyz.lande/dao"
"xyz.lande/data"
"xyz.lande/docs"
"xyz.lande/router"
)
func main() {
log.Println("app initializing")
docs.SwaggerInfo.Title = "測(cè)試"
docs.SwaggerInfo.Version = "v1.0"
//讀取配置
InitConfig()
//獲取初始化后的數(shù)據(jù)庫(kù)
db := dao.InitDB()
//延遲關(guān)閉
defer db.Close()
//路由
router.RunEcho()
}
//viper讀取配置文件
func InitConfig() {
//從打包后的文件中讀取配置
bytesContent, err := data.Asset("yml/application.yml")
if err != nil {
panic("Asset() can not found setting file")
}
//設(shè)置要讀取的文件類(lèi)型
viper.SetConfigType("yml")
//讀取
viper.ReadConfig(bytes.NewBuffer(bytesContent))
}
bytesContent, err := data.Asset("yml/application.yml")這段代碼就是一個(gè)使用 go-bindata 的例子,這里講 yml/application.yml通過(guò) go-bindata 封裝起來(lái),然后下面就直接使用它,這樣在運(yùn)行的時(shí)候我就不用關(guān)注靜態(tài)文件的具體位置了,我只認(rèn)準(zhǔn)yml/application.yml 就好了。
四、編譯運(yùn)行
go build main.go