Глагол форматирования %+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,
которая форматирует строку и возвращает ее