Este artigo aborda o problema de recuperação de campos struct de elementos de mapa em modelos HTML usando o html/ pacote de modelo em Go.
Considere a seguinte estrutura de tarefa:
type Task struct {
Cmd string
Args []string
Desc string
}
Além disso, um mapa é inicializado com estruturas Task como valores e strings como chaves:
var taskMap = map[string]Task{
"find": Task{
Cmd: "find",
Args: []string{"/tmp/"},
Desc: "find files in /tmp dir",
},
"grep": Task{
Cmd: "grep",
Args:[]string{"foo","/tmp/*", "-R"},
Desc: "grep files match having foo",
},
}
Agora, vamos examinar o problema em questão. Um modelo está sendo usado para analisar uma página HTML:
func listHandle(w http.ResponseWriter, r *http.Request){
t, _ := template.ParseFiles("index.tmpl")
t.Execute(w, taskMap)
}
O seguinte trecho de código representa o modelo index.tmpl:
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
Essa abordagem gera com êxito as chaves e os valores do mapa, mas as tentativas de acessar os campos da tarefa no modelo, por exemplo, usando {{$value.Desc}}, resultam em erros.
A solução está em exportar os campos que você deseja acessar dentro dos templates. Isso pode ser conseguido colocando a primeira letra dos nomes dos campos em maiúscula:
type Task struct {
Cmd string
Args []string
Desc string
}
Consequentemente, as referências a nomes de campos dentro do modelo também devem ser maiúsculas:
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
Seguindo essas etapas, você pode recuperar e exibir com sucesso o campo Desc de cada tarefa no modelo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3