РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
645 of 1593 menu

Глагол форматирования %+v

Глагол форматирования %+v из пакета fmt используется для вывода значений переменных с дополнительной информацией. В отличие от стандартного %v, этот глагол для структур выводит не только значения полей, но и их имена, что значительно упрощает отладку и анализ данных. Для других типов данных %+v работает аналогично %v, но для структур это незаменимый инструмент.

Синтаксис

fmt.Printf("%+v", value)

Пример со структурой

Давайте выведем структуру с помощью %+v и сравним с обычным %v:

package main import "fmt" type Person struct { Name string Age int City string } func main() { p := Person{Name: "Alice", Age: 30, City: "London"} fmt.Printf("%%v: %v\n", p) fmt.Printf("%%+v: %+v\n", p) }

Результат выполнения кода:

%v: {Alice 30 London} %+v: {Name:Alice Age:30 City:London}

Пример со вложенными структурами

Глагол %+v рекурсивно выводит имена полей для вложенных структур:

package main import "fmt" type Address struct { Street string Zip int } type Employee struct { Name string Age int Address Address } func main() { e := Employee{ Name: "Bob", Age: 28, Address: Address{ Street: "Oxford St", Zip: 12345, }, } fmt.Printf("%%+v: %+v\n", e) }

Результат выполнения кода:

%+v: {Name:Bob Age:28 Address:{Street:Oxford St Zip:12345}}

Пример с указателями и нулевыми значениями

Глагол %+v корректно обрабатывает указатели и отображает нулевые значения полей:

package main import "fmt" type Item struct { ID int Title string Active bool Next *Item } func main() { item := Item{ ID: 1, Title: "First", Active: false, Next: nil, } fmt.Printf("%%+v: %+v\n", item) }

Результат выполнения кода:

%+v: {ID:1 Title:First Active:false Next:<nil>}

Пример с неэкспортируемыми полями

Глагол %+v не выводит имена неэкспортируемых (приватных) полей, только их значения, если они доступны:

package main import "fmt" type User struct { Name string age int // неэкспортируемое поле email string } func main() { u := User{Name: "Charlie", age: 25, email: "charlie@example.com"} fmt.Printf("%%+v: %+v\n", u) fmt.Printf("%%v: %v\n", u) }

Результат выполнения кода:

%+v: {Name:Charlie age:25 email:charlie@example.com} %v: {Charlie 25 charlie@example.com}

Смотрите также

  • глагол %v,
    который выводит значение в стандартном формате
  • глагол %#v,
    который выводит значение в синтаксисе Go
  • функцию fmt.Printf,
    которая форматирует и выводит строку в стандартный вывод
  • функцию fmt.Sprintf,
    которая форматирует строку и возвращает ее
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить