Печатане на структури от данни

В Go може да използвате няколко специални fmt.Printf/fmt.Sprintf/fmt.Fprintf specifiers ("verbs" според документацията). С тяхна помощ може много лесно да извеждате сложни структури от данни. Ето кратък списък на по-полезните specifiers:

%v показва стойността във формата ѝ по подразбиране. Ако използвате %+v, Go ще изведе и имената на полетата в използваните структури:

fmt.Printf("numbers and strings: %v %v %v\n", 15, 0.0314e2, "string")
fmt.Printf("arrays and slices: %v %v\n", [3]string{"one", "two", "three"}, []int{1, 2, 3})
fmt.Printf("structs with and without '+': %v %+v\n", Person{"Чочко", 27}, Person{"Точко", 11})

// Output:
// numbers and strings: 15 3.14 string
// arrays and slices: [one two three] [1 2 3]
// structs with and without '+': {Чочко 27} {name:Точко age:11}

%#v показва как подадените променливи се дефинират с валиден Go синтаксис:

fmt.Printf("numbers and strings: %#v %#v %#v\n", 15, 0.0314e2, "string")
fmt.Printf("arrays and slices: %#v %#v\n", [3]string{"one", "two", "three"}, []int{1, 2, 3})
fmt.Printf("structs: %#v\n", Person{"Чочко", 27})

// Output:
// numbers and strings: 15 3.14 "string"
// arrays and slices: [3]string{"one", "two", "three"} []int{1, 2, 3}
// structs: main.Person{name:"Чочко", age:0x1b}

%T връща типовете на подадените променливи

type batman int
var a batman = 5

fmt.Printf("%T %T %T %T %T %T %T\n", 15, 0.0314e2, a, "wtf", [3]string{"one", "two", "three"}, []int{1, 2, 3}, Person{"Name", 27})

// Output:
// int float64 main.batman string [3]string []int main.Person