2 回答

TA貢獻1803條經驗 獲得超6個贊
好吧,這里有幾個問題。
除非使用變量聲明語法,否則不能在另一個函數中聲明函數
func main() {
// This
var myFunc = func() {
// ...
}
// Not this
func myFunc() {
// ...
}
}
該結構告訴 YAML 解封船者期望。您的結構應具有與 yaml 文件的大小寫和結構匹配的 yaml 標記。Config
// It is expecting this
url: "<some_URL>"
username: "<some_username>"
token: "<some_token>"
// Your yaml looks like this
config:
Url: "<some_URL>"
Username: "<some_username>"
Token: "<some_token>"
以下對我有用:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"gopkg.in/yaml.v2"
)
type YAMLFile struct {
Config Config `yaml:"config"`
}
type Config struct {
URL string `yaml:"url"`
Username string `yaml:"username"`
Token string `yaml:"token"`
}
func main() {
config, err := readConfig()
if err != nil {
panic(err)
}
fmt.Printf("%+v", config)
req, err := http.NewRequest("GET", config.URL, nil)
if err != nil {
panic(err)
}
req.SetBasicAuth(config.Username, config.Token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
func readConfig() (*Config, error) {
config := &YAMLFile{}
cfgFile, err := ioutil.ReadFile("./config.yaml")
if err != nil {
return nil, err
}
err = yaml.Unmarshal(cfgFile, config)
return &config.Config, err
}

TA貢獻1801條經驗 獲得超16個贊
巴雷特
這是我前段時間為解決這個問題而制作的配置庫:https://github.com/fulldump/goconfig。
用法很簡單:
使用您需要的所有配置定義一個結構:
type Config struct {
URL string
Username string
Token string
}
實例化具有該類型的變量,并使用默認值填充它:
c := &Config{
URL: "http://default/url"
Username: "default username"
}
使用來自環境、命令行參數和/或 json 文件的數據自動填充配置變量:使用 follog 行:
goconfig.Read(c)
例如,在您的情況下,您可以按如下方式傳遞 JSON 文件,以從文件中讀取所有配置密鑰,但在啟動時使用參數覆蓋令牌。./my-binary -token "my_secret_token" -config my-config-file.json
- 2 回答
- 0 關注
- 90 瀏覽
添加回答
舉報