¿Cómo puedo imprimir (en la consola) el Id
,Title
, Name
, etc de esta estructura en 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
.Respuestas:
Para imprimir el nombre de los campos en una estructura:
Del
fmt
paquete :Eso supone que tiene una instancia de Proyecto (en '
yourProject
')El artículo JSON and Go dará más detalles sobre cómo recuperar los valores de una estructura JSON.
Esta página de ejemplo de Ir proporciona otra técnica:
Eso imprimiría:
Si no tiene ninguna instancia, debe usar la reflexión para mostrar el nombre del campo de una estructura dada, como en este ejemplo .
fuente
Quiero recomendar go-spew , que según su github "Implementa una impresora bastante profunda para estructuras de datos Go para ayudar en la depuración"
ejemplo de uso:
salida:
fuente
mis 2 centavos serían para usar
json.MarshalIndent
, me sorprende que esto no se sugiera, ya que es el más sencillo. por ejemplo:sin deps externos y resultados en una salida bien formateada.
fuente
"\t"
con" "
si quiere sangría espacial en su lugarMarshal()
solo serializa los campos exportados de una estructura; sin embargo, es perfecto para los mapas.Creo que sería mejor implementar un stringer personalizado si desea algún tipo de salida formateada de un
struct
por ejemplo
fuente
fuente
fmt.Printf(%#v, p)
, me arrojamain.struct
construct type
cuál es la diferencia entre"%#v"
y"%+v"
@cokebolAlternativamente, intente usar esta función
PrettyPrint()
Para usar esto, no necesita ningún paquete adicional con la excepción de ,
fmt
yencoding/json
solo una referencia, puntero o literal de la estructura que ha creado.Para usar solo tome su estructura, inicialícela en main o en cualquier paquete en el que se encuentre y páselo
PrettyPrint()
.Su salida sería
Juega un poco con el código aquí .
fuente
Me gusta la basura .
De su léame:
Sdump
es bastante útil en las pruebas:fuente
Recomiendo usar Pretty Printer Library . En eso puedes imprimir cualquier estructura muy fácilmente.
Instalar biblioteca
https://github.com/kr/pretty
o
Ahora haz esto en tu código
También puede obtener la diferencia entre el componente a través de esta biblioteca y mucho más. También puede consultar la biblioteca de documentos aquí.
fuente
pretty.Formatter
Cuando tenga estructuras más complejas, es posible que necesite convertir a JSON antes de imprimir:
Fuente: https://gist.github.com/tetsuok/4942960
fuente
Visita aquí para ver el código completo. Aquí también encontrará un enlace para un terminal en línea donde se puede ejecutar el código completo y el programa representa cómo extraer la información de la estructura (nombre del campo, su tipo y valor). A continuación se muestra el fragmento de programa que solo imprime los nombres de campo.
fuente
También hay go-render , que maneja la recursividad del puntero y mucha clasificación de claves para cadenas y mapas int.
Instalación:
Ejemplo:
Que imprime:
fuente
Esta es la forma básica de imprimir los detalles.
fuente
Otra forma es crear un func llamado
toString
que tome struct, formatear los campos como desee.fuente
Stringer
interfaz. Se vería así: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) }
Sin usar bibliotecas externas y con una nueva línea después de cada campo:
fuente
fuente
muy simple no tengo la estructura de datos y confirmaciones, así que cambié el
Para aprender, puede obtener ayuda desde aquí: https://gobyexample.com/structs
fuente
Tal vez esto no debería aplicarse a las solicitudes de producción, pero si está en modo de depuración, le sugiero que siga el siguiente enfoque.
Esto da como resultado el formateo de los datos en formato json con mayor legibilidad.
fuente
La mayoría de estos paquetes se basan en el paquete reflect para hacer que tales cosas sean posibles.
fmt.Sprintf () está utilizando -> func (p * pp) printArg (interfaz arg {}, verbo rune) de lib estándar
Vaya a la línea 638 -> https://golang.org/src/fmt/print.go
Reflexión:
https://golang.org/pkg/reflect/
Código de ejemplo:
https://github.com/donutloop/toolkit/blob/master/debugutil/prettysprint.go
fuente
Una mejor manera de hacer esto sería crear una constante global para la cadena "% + v" en un paquete llamado "commons" (quizás) y usarla en todas partes en su código
fuente
Println
función no acepta un argumento de cadena de formato. Dices que una constante global es mejor pero no has justificado por qué es mejor que la respuesta marcada. Ha creado una etiqueta no estándar para una cadena de formato conocida. La etiqueta es mucho más larga, más difícil de recordar y nadie más que trabaje en su código la usaría. Utiliza ALL_CAPS y un guión bajo del cual todos los Golang Linter se quejarán. La convención esmixedCaps
golang.org/doc/effective_go.html#mixed-caps Probablemente sea mejor eliminar esta respuesta.