0

テンプレートでループオーバーして追加を行うgoファイルを生成しようとしている文字列のスライス(.Table.PKey.Columns)がありますが、テンプレートで$valueを出力すると、明らかにGoは私のためにそれを引用しているので、エラーが発生しています:

5:27: expected selector or type assertion, found 'STRING' "ID"

つまり、テンプレート出力が次のようになるのではなく、o.IDこれが私が目指しているものですが、最終的には次のようになりますo."ID"(推測します)。

これが範囲ループを使用した結果であるという私の仮定は正しいですか? 他の場所で変数に直接アクセスすると(たとえば、文字列があり、行ったとします : o.{{.Table.MyString}})、正常に動作するようですが、範囲ループをミックスに組み込んでみるとすぐに、物事を引用しているようです。

{{- range $key, $value := .Table.PKey.Columns }}
  args = append(args, o.{{$value}})
{{ end -}}

助言がありますか?ありがとうございました。

4

2 に答える 2

3

{{range}}何も引用しません。出力に表示"ID"される場合、入力値には "ID"引用符が含まれています!

次の例を参照してください。

func main() {
    m := map[string]interface{}{
        "Id":     "Id1",
        "Quoted": `"Id2"`,
        "Ids":    []string{"Id1", `"Id2"`, "Abc"},
    }
    t := template.Must(template.New("").Parse(src))
    t.Execute(os.Stdout, m)
}

const src = `{{.Id}} {{index .Ids 0}} {{.Quoted}} 
{{range $key, $value := .Ids}}{{$value}}
{{end}}
`

出力 ( Go Playgroundで試してください):

Id1 Id1 "Id2" 
Id1
"Id2"
Abc
于 2016-04-23T16:05:10.933 に答える
0

Go Template がレンダリングしている変数がタグ内にある場合、Go Template は文字列を引用符で囲みます。

一部のオプションには、Go Template にレンダリングを依頼する前にコード内を生成することが含まれます。

于 2022-02-20T18:54:40.307 に答える