亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在戈朗中將秘密作為配置文件拉取

如何在戈朗中將秘密作為配置文件拉取

Go
森欄 2022-09-12 16:56:34
因此,我對Go非常陌生,我很好奇如何動態導入密碼和URL而不會在我的腳本中公開它們。在python中,我能夠使用JSON有效負載來實現這一點,并且基本上會導入JSON,加載有效載荷,并指定何時需要傳遞需要保密的規范。這是我的Go腳本:package mainimport (    "io/ioutil"    "net/http"    "fmt"    "gopkg.in/yaml.v2")// curl -u <username>:<password> <some_url>func main() {    type Config struct {    URL      string `yaml:"url"`    Username string `yaml:"username"`    Token    string `yaml:"token"`    }    func readConfig() (*Config, error) {    config := &Config{}    cfgFile, err := ioutil.ReadFile("config.yaml")    if err != nil {        return nil, err    }    err = yaml.Unmarshal(cfgFile, config)    return config, err    }    req, err := http.NewRequest("GET", config.URL, nil)    if err != nil {        // handle err    }    req.SetBasicAuth(config.Username, config.Token)    resp, err := http.DefaultClient.Do(req)    if err != nil {        // handle err    }    defer resp.Body.Close()    body, _ := ioutil.ReadAll(resp.Body)    fmt.Println(string(body))}可以想象,我在加載密碼時運氣不佳,當我使用直接令牌更改以下內容時,它會在腳本中公開我的密碼,并在Jira中生成JSON有效負載。config.URLconfig.Usernameconfig.Token因此,如果我在YAML中有一個配置文件, 如下所示:config:    URL: "<some_URL>"    Username: "<some_username>"    Token: "<some_token>"如何將 YAML 文件加載到腳本中?如何加載 JSON 等效項?{  "config": {    "URL": "<some_URL>"    "Username": "<some_username>",    "Token": "<some_token>"  }}
查看完整描述

2 回答

?
慕碼人8056858

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

}


查看完整回答
反對 回復 2022-09-12
?
侃侃爾雅

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


查看完整回答
反對 回復 2022-09-12
  • 2 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號