第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在 GO 模板中使用 range over struct

在 GO 模板中使用 range over struct

Go
慕的地6264312 2023-04-24 15:51:07
我從中解析結(jié)構(gòu)values.yaml并想在其中使用它template.yaml這是我的values.yaml文件:services:   app:     image: matryoshka/app     replicaCount: 1   cron:     image: matryoshka/cron     replicaCount: 1這是我的template.yaml(無效代碼):{{- range $key, $value := .Services}}     {{$key}}{{$value}} {{- end}}這給了我錯誤:panic: template: template.yaml:1:26: executing "template.yaml" at <.Services>: range can't iterate over {{atryoshka/app 1} {matryoshka/cron 1}}這是我的.go代碼:package mainimport (    "html/template"    "io/ioutil"    "os"    "path/filepath"    "gopkg.in/yaml.v2")type Values struct {    Services struct {        App struct {            Image        string `yaml:"image"`            ReplicaCount string `yaml:"replicaCount"`        } `yaml:"app"`        Cron struct {            Image        string `yaml:"image"`            ReplicaCount string `yaml:"replicaCount"`        } `yaml:"cron"`    }}func parseValues() Values {    var values Values    filename, _ := filepath.Abs("./values.yaml")    yamlFile, err := ioutil.ReadFile(filename)    err = yaml.Unmarshal(yamlFile, &values)    if err != nil {        panic(err)    }    return values}func insertValues(class Values) {    paths := []string{"template.yaml"}    t, err := template.New(paths[0]).ParseFiles(paths...)    if err != nil {        panic(err)    }    err = t.Execute(os.Stdout, class)    if err != nil {        panic(err)    }}func main() {    values := parseValues()    insertValues(values)}如何.Services正確迭代template.yaml?我發(fā)現(xiàn)只有選項,{{- range $key, $value := .Services}}但它不起作用。
查看完整描述

1 回答

?
函數(shù)式編程

TA貢獻1807條經(jīng)驗 獲得超9個贊

正如您所經(jīng)歷的那樣,您不能跨越結(jié)構(gòu)的字段。您只能對切片、數(shù)組、映射和通道進行范圍。


使用地圖

最簡單的方法就是傳遞它:一張地圖。您可以直接將 YAML 解組為映射或空接口:


func parseValues() interface{} {

? ? var values interface{}

? ? // ...rest is unchanged

}


func insertValues(class interface{}) {

? ? // ...unchanged

}

稍微更改模板的格式(注意.services):


{{- range $key, $value := .services}}

{{$key}} {{$value}}

{{- end}}

有了這些,它就可以工作并且輸出是:


app map[replicaCount:1 image:matryoshka/app]

cron map[image:matryoshka/cron replicaCount:1]

使用切片

如果您想繼續(xù)使用您的Services模型,另一種選擇是手動準備和傳遞一部分字段:


insertValues([]interface{}{values.Services.App, values.Services.Cron})

然后是模板:


{{- range $key, $value := .}}

{{$key}} {{$value}}

{{- end}}

然后是輸出:


0 {matryoshka/app 1}

1 {matryoshka/cron 1}

使用切片和反射

如果您希望它保持“動態(tài)”(意味著您不必手動枚舉字段),您可以創(chuàng)建一個輔助函數(shù),它使用反射來實現(xiàn)。



查看完整回答
反對 回復 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號