Jak mogę wydrukować (w konsoli) Id
, Title
, Name
, itd. Z tej struktury w 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
.Odpowiedzi:
Aby wydrukować nazwę pól w strukturze:
Z
fmt
paczki :To znaczy, że masz instancję projektu (w „
yourProject
”)Artykuł JSON i Go poda więcej szczegółów na temat pobierania wartości ze struktury JSON.
Ta strona z przykładami zawiera inną technikę:
To by wydrukowało:
Jeśli nie masz żadnej instancji, musisz użyć refleksji, aby wyświetlić nazwę pola danej struktury, jak w tym przykładzie .
źródło
Chcę polecić go-spew , który zgodnie z ich githubem „Implementuje bardzo ładną drukarkę dla struktur danych Go, aby pomóc w debugowaniu”
przykład użycia:
wynik:
źródło
moje 2 centy byłyby użyteczne
json.MarshalIndent
- zdziwione, że nie jest to sugerowane, ponieważ jest najprostsze. na przykład:brak zewnętrznych dep i skutkuje ładnie sformatowanym wyjściem.
źródło
"\t"
ze" "
jeśli chcesz przestrzeń wcięcia zamiastMarshal()
że serializuje tylko wyeksportowane pola struktury - jest to jednak idealne rozwiązanie do map.Myślę, że lepiej byłoby zaimplementować niestandardowy stringer, jeśli chcesz jakiegoś sformatowanego wyjścia
struct
na przykład
źródło
źródło
fmt.Printf(%#v, p)
, Wyrzuca mniemain.struct
zstruct type
tego, co jest różnica między"%#v"
i"%+v"
@cokebolAlternatywnie spróbuj użyć tej funkcji
PrettyPrint()
Aby tego użyć, nie potrzebujesz żadnych dodatkowych pakietów, z wyjątkiem
fmt
iencoding/json
, tylko odniesienie, wskaźnik do lub dosłownie utworzonej struktury.Aby użyć, po prostu weź swoją strukturę, zainicjuj ją w pakiecie głównym lub w dowolnym pakiecie, w którym się znajdujesz, i przekaż ją
PrettyPrint()
.Jego wyjście byłoby
Pobaw się z kodu tutaj .
źródło
Lubię śmieci .
Z ich pliku Readme:
Sdump
jest bardzo przydatny w testach:źródło
Polecam korzystać z Pretty Printer Library . Dzięki temu możesz bardzo łatwo wydrukować dowolną strukturę.
Zainstaluj bibliotekę
https://github.com/kr/pretty
lub
Teraz zrób tak w swoim kodzie
Ponadto można uzyskać różnicę między składnikiem za pośrednictwem tej biblioteki i tak dalej. Możesz także zajrzeć do biblioteki dokumentów tutaj.
źródło
pretty.Formatter
Jeśli masz bardziej złożone struktury, przed drukowaniem może być konieczna konwersja do JSON:
Źródło: https://gist.github.com/tetsuok/4942960
źródło
Odwiedź tutaj, aby zobaczyć pełny kod. Tutaj znajdziesz również łącze do terminala online, w którym można uruchomić cały kod, a program reprezentuje sposób wydobywania informacji o strukturze (nazwa pola, ich typ i wartość). Poniżej znajduje się fragment programu, który drukuje tylko nazwy pól.
źródło
Istnieje również go-render , który obsługuje rekurencję wskaźnika i wiele sortowania kluczy dla map ciągów i map int.
Instalacja:
Przykład:
Które wydruki:
źródło
Jest to podstawowy sposób drukowania szczegółów
źródło
Innym sposobem jest utworzenie func o nazwie
toString
strukturalnej, sformatowanie pól według własnego uznania.źródło
Stringer
interfejs. Wyglądałoby to tak: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) }
Bez użycia zewnętrznych bibliotek i nowej linii po każdym polu:
źródło
źródło
bardzo proste Nie mam struktury danych i zatwierdzeń, więc zmieniłem
Aby się uczyć, możesz uzyskać pomoc tutaj: https://gobyexample.com/structs
źródło
Być może nie należy tego stosować w przypadku zleceń produkcyjnych, ale jeśli jesteś w trybie debugowania, sugeruję zastosować poniższe podejście.
Powoduje to formatowanie danych w formacie json o zwiększonej czytelności.
źródło
Większość z tych pakietów polega na pakiecie odzwierciedlającym, aby umożliwić takie rzeczy.
fmt.Sprintf () używa -> func (p * pp) printArg (interfejs arg {}, runa czasownika) standardowej biblioteki lib
Idź do linii 638 -> https://golang.org/src/fmt/print.go
Odbicie:
https://golang.org/pkg/reflect/
Przykładowy kod:
https://github.com/donutloop/toolkit/blob/master/debugutil/prettysprint.go
źródło
Lepszym sposobem na to byłoby utworzenie globalnej stałej dla ciągu „% + v” w pakiecie o nazwie „commons” (być może) i użycie go wszędzie w kodzie
źródło
Println
funkcja nie akceptuje argumentu formatu ciągu. Mówisz, że stała globalna jest lepsza, ale nie uzasadniłeś, dlaczego jest lepsza niż zaznaczona odpowiedź. Utworzono niestandardową etykietę dla dobrze znanego ciągu formatu. Etykieta jest znacznie dłuższa, trudniejsza do zapamiętania i nikt inny, kto pracuje nad twoim kodem, by jej nie użył. Używa zarówno ALL_CAPS, jak i podkreślenia, na które narzeka każdy golang. Konwencja tomixedCaps
golang.org/doc/effective_go.html#mixed-caps Prawdopodobnie najlepiej usunąć tę odpowiedź.