"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 > Por que não posso usar variáveis ​​em tags Go Struct?

Por que não posso usar variáveis ​​em tags Go Struct?

Publicado em 2024-11-05
Navegar:208

Why Can\'t I Use Variables in Go Struct Tags?

Usando variáveis ​​em tags de estrutura Go

No Go, tags de estrutura são usadas para especificar metadados sobre os campos dentro de uma estrutura. Embora seja possível definir tags usando strings literais, tentativas de usar variáveis ​​em seus lugares resultam em erros.

Uso inválido:

const (
    TYPE = "type"
)

type Shape struct {
    Type string fmt.Sprintf("json:\"%s\"", TYPE)
}

Este código gerará um erro de sintaxe, pois tenta usar uma instrução fmt.Sprintf para gerar dinamicamente o valor da tag. Go exige que as tags struct sejam literais de string em tempo de compilação.

Uso válido:

type Shape struct {
    Type string `json:"type"`
}

Neste exemplo, a tag é definida como uma string literal. Esta é a maneira correta de especificar uma tag struct.

Explicação:

A principal diferença entre os exemplos válidos e inválidos está no tempo de avaliação. Literais de string são avaliados em tempo de compilação, enquanto a instrução fmt.Sprintf é avaliada em tempo de execução. Tags Struct são usadas por várias ferramentas Go, como codificadores e decodificadores JSON, durante a compilação. Essas ferramentas precisam que os valores das tags sejam conhecidos em tempo de compilação para gerar adequadamente o código necessário.

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