"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como acessar campos estruturais aninhados em modelos HTML no Go?

Como acessar campos estruturais aninhados em modelos HTML no Go?

Publicado em 17/11/2024
Navegar:610

How to Access Nested Struct Fields in HTML Templates in Go?

Como acessar campos estruturais de elementos de mapa em modelos HTML em Go

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.

    Declaração de lançamento Este artigo foi reimpresso em: 1729726421 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
    Tutorial mais recente Mais>

    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