Как я могу напечатать (в консоли) Id
, Title
, Name
и т.д. этой структуры в 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
.Ответы:
Чтобы напечатать название полей в структуре:
Из
fmt
пакета :Это предполагает, что у вас есть экземпляр Project (в '
yourProject
')В статье JSON and Go будет дано больше подробностей о том, как извлечь значения из структуры JSON.
Эта страница Go by example предоставляет другую технику:
Это напечатало бы:
Если у вас нет экземпляра, вам нужно использовать отражение, чтобы отобразить имя поля данной структуры, как в этом примере .
источник
Я хочу порекомендовать go-spew , который в соответствии с их github "Реализует довольно красивый принтер для структур данных Go, чтобы помочь в отладке"
пример использования:
вывод:
источник
мой 2cents должен был бы использовать
json.MarshalIndent
- удивленный, это не предложено, поскольку это является самым прямым. например:нет внешних депов и приводит к красиво отформатированному выводу.
источник
"\t"
на," "
если вместо этого хотите сделать отступ в пространствеMarshal()
только сериализует экспортируемые поля структуры - это идеально подходит для карт, хотя.Я думаю, что было бы лучше реализовать пользовательский стрингер, если вы хотите какой-то форматированный вывод
struct
например
источник
источник
fmt.Printf(%#v, p)
, Бросает меняmain.struct
сstruct type
чем разница между"%#v"
и"%+v"
@cokebolИли попробуйте использовать эту функцию
PrettyPrint()
Для того, чтобы использовать это, вам не нужны никакие дополнительные пакеты за исключением
fmt
иencoding/json
, просто ссылка, указатель или литерал созданной вами структуры.Для использования просто возьмите свою структуру, инициализируйте ее в основном или любом другом пакете, в котором вы находитесь, и передайте его в
PrettyPrint()
.Это будет выходной
Поиграйте с кодом здесь .
источник
Я люблю мусор .
Из их readme:
Sdump
довольно удобно в тестах:источник
Я рекомендую использовать Pretty Printer Library . В этом вы можете распечатать любую структуру очень легко.
Установить библиотеку
https://github.com/kr/pretty
или
Теперь сделайте так в своем коде
Также вы можете получить разницу между компонентами через эту библиотеку и многое другое. Вы также можете посмотреть библиотечные документы здесь.
источник
pretty.Formatter
Если у вас есть более сложные структуры, вам может потребоваться преобразовать в JSON перед печатью:
Источник: https://gist.github.com/tetsuok/4942960
источник
Посетите здесь, чтобы увидеть полный код. Здесь вы также найдете ссылку для онлайн-терминала, где можно запустить полный код и программа показывает, как извлечь информацию о структуре (имя поля, его тип и значение). Ниже приведен фрагмент программы, который печатает только имена полей.
источник
Также есть go-render , который обрабатывает рекурсию указателя и много сортирует ключи для строковых и целевых карт.
Установка:
Пример:
Какие отпечатки:
источник
Это основной способ печати деталей
источник
Другой способ - создать функцию с именем
toString
struct, которая принимает структуру, форматировать поля по своему усмотрению.источник
Stringer
интерфейс. Это будет выглядеть примерно так: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) }
Без использования внешних библиотек и с новой строкой после каждого поля:
источник
источник
очень просто у меня нет структуры данных и коммитов, поэтому я изменил
Для обучения вы можете получить помощь здесь: https://gobyexample.com/structs
источник
Возможно, это не должно применяться к производственным запросам, но если вы находитесь в режиме отладки, я предлагаю вам придерживаться следующего подхода.
Это приводит к форматированию данных в формате json с повышенной удобочитаемостью.
источник
Большинство этих пакетов полагаются на пакет отражения, чтобы сделать такие вещи возможными.
fmt.Sprintf () использует -> func (p * pp) printArg (интерфейс arg {}, глагол rune) стандартного lib
Перейдите на линию 638 -> https://golang.org/src/fmt/print.go.
Отражение:
https://golang.org/pkg/reflect/
Пример кода:
https://github.com/donutloop/toolkit/blob/master/debugutil/prettysprint.go
источник
Лучший способ сделать это - создать глобальную константу для строки «% + v» в пакете с именем «commons» (возможно) и использовать ее повсюду в вашем коде.
источник
Println
функция не принимает аргумент строки формата. Вы говорите, что глобальная константа лучше, но не обосновывает, почему она лучше, чем отмеченный ответ. Вы создали нестандартную метку для хорошо известной строки формата. Метка намного длиннее, ее труднее запомнить, и никто, кто работает над вашим кодом, не будет ее использовать. Он использует как ALL_CAPS, так и символ подчеркивания, на который будет жаловаться каждый golang linter. СоглашениеmixedCaps
гласит golang.org/doc/effective_go.html#mixed-caps Вероятно, лучше всего удалить этот ответ.