Como posso imprimir (no console) a Id
, Title
, Name
, etc. deste struct em golang?
type Project struct {
Id int64 `json:"project_id"`
Title string `json:"title"`
Name string `json:"name"`
Data Data `json:"data"`
Commits Commits `json:"commits"`
}
fmt.Println
.Respostas:
Para imprimir o nome dos campos em uma estrutura:
Do
fmt
pacote :Isso supõe que você tenha uma instância do Project (em '
yourProject
')O artigo JSON e Go fornecerá mais detalhes sobre como recuperar os valores de uma estrutura JSON.
Esta página Ir por exemplo fornece outra técnica:
Isso imprimiria:
Se você não tiver nenhuma instância, precisará usar reflexão para exibir o nome do campo de uma determinada estrutura, como neste exemplo .
fonte
Quero recomendar go-spew , que de acordo com o github "Implementa uma impressora bonita e profunda para estruturas de dados Go para ajudar na depuração"
exemplo de uso:
resultado:
fonte
meus 2 centavos seriam usados
json.MarshalIndent
- surpreso que isso não seja sugerido, pois é o mais direto. por exemplo:nenhum departamento externo e resulta em uma saída bem formatada.
fonte
"\t"
com" "
se você quiser recuo espaço em vezMarshal()
apenas serializa os campos exportados de uma estrutura - é perfeito para mapas.Eu acho que seria melhor implementar uma longarina personalizada se você quiser algum tipo de saída formatada de um
struct
por exemplo
fonte
fonte
fmt.Printf(%#v, p)
, Atira-memain.struct
comstruct type
o que é a diferença entre"%#v"
e"%+v"
@cokebolComo alternativa, tente usar esta função
PrettyPrint()
Para usar isso, você não precisa de pacotes adicionais, com exceção de
fmt
eencoding/json
apenas uma referência, ponteiro ou literal da estrutura que você criou.Para usar apenas pegue sua estrutura, inicialize-a no pacote principal ou em qualquer que seja o pacote e passe-o para
PrettyPrint()
.Sua saída seria
Brinque com o código aqui .
fonte
Eu gosto de lixo .
De seu leia-me:
Sdump
é bastante útil em testes:fonte
Eu recomendo usar a Pretty Printer Library . Em que você pode imprimir qualquer estrutura com muita facilidade.
Instalar Biblioteca
https://github.com/kr/pretty
ou
Agora faça isso no seu código
Além disso, você pode obter diferença entre os componentes desta biblioteca e muito mais. Você também pode dar uma olhada na biblioteca do Documentos aqui.
fonte
pretty.Formatter
Quando você possui estruturas mais complexas, pode ser necessário converter para JSON antes de imprimir:
Fonte: https://gist.github.com/tetsuok/4942960
fonte
Visite aqui para ver o código completo. Aqui você também encontrará um link para um terminal on-line onde o código completo pode ser executado e o programa representa como extrair as informações da estrutura (nome do campo, tipo e valor). Abaixo está o trecho de programa que imprime apenas os nomes dos campos.
fonte
Há também go-render , que lida com a recursão do ponteiro e muita classificação de chave para os mapas string e int.
Instalação:
Exemplo:
Que imprime:
fonte
Esta é a maneira básica de imprimir os detalhes
fonte
Outra maneira é criar uma função chamada
toString
que aceite struct, formate os campos como desejar.fonte
Stringer
interface. Seria algo como isto:func (t T) String() string { return fmt.Sprintf("SomeT{TID: %d, TField: %d, SomeTField: %s, SomeAnotherField: %s}", t.ID, t.Field, t.SomeTField, t.SomeAnotherField) }
Sem usar bibliotecas externas e com nova linha após cada campo:
fonte
fonte
muito simples eu não tenho a estrutura de dados e confirma então mudei o
Para aprender, você pode obter ajuda aqui: https://gobyexample.com/structs
fonte
Talvez isso não deva ser aplicado para solicitações de produção, mas se você estiver no modo de depuração, sugiro que você siga a abordagem abaixo.
Isso resulta na formatação dos dados no formato json com maior legibilidade.
fonte
A maioria desses pacotes depende do pacote reflect para tornar essas coisas possíveis.
fmt.Sprintf () está usando -> func (p * pp) printArg (interface de argumento {}, runa de verbo) da biblioteca padrão
Vá para a linha 638 -> https://golang.org/src/fmt/print.go
Reflexão:
https://golang.org/pkg/reflect/
Código de exemplo:
https://github.com/donutloop/toolkit/blob/master/debugutil/prettysprint.go
fonte
Uma maneira melhor de fazer isso seria criar uma constante global para a string "% + v" em um pacote chamado "commons" (talvez) e usá-la em qualquer lugar do código
fonte
Println
função não aceita um argumento de cadeia de formato. Você diz que uma constante global é melhor, mas não justificou por que é melhor que a resposta marcada. Você criou um rótulo não padrão para uma sequência de formato conhecida. O rótulo é muito mais longo, mais difícil de lembrar e ninguém mais que trabalha no seu código o usaria. Ele usa ALL_CAPS e um sublinhado sobre o qual todos os golang-langs se queixam. A convenção émixedCaps
golang.org/doc/effective_go.html#mixed-caps Provavelmente, é melhor remover esta resposta.