Интерфейс fmt.GoStringer
Интерфейс fmt.GoStringer позволяет управлять тем,
как значение будет отображаться при использовании
форматирования %#v. Он содержит метод
GoString, который возвращает строку,
представляющую значение в синтаксисе Go.
Этот интерфейс полезен, когда нужно кастомизировать
вывод структуры или типа для целей отладки,
чтобы получить более информативное представление
объекта.
Метод GoString не принимает параметров и
возвращает строку. Реализуя этот метод для своего типа,
вы определяете, как пакет fmt будет форматировать
значение при использовании спецификатора %#v.
По умолчанию, для структур %#v выводит имя типа
и значения полей в фигурных скобках.
Синтаксис
type GoStringer interface {
GoString() string
}
Пример
Давайте реализуем интерфейс fmt.GoStringer
для пользовательской структуры:
package main
import "fmt"
type User struct {
ID int
Name string
}
func (u User) GoString() string {
return fmt.Sprintf("User{ID:%d, Name:%q}", u.ID, u.Name)
}
func main() {
user := User{ID: 1, Name: "Alice"}
fmt.Printf("%#v\n", user)
}
Результат выполнения кода:
"User{ID:1, Name:\"Alice\"}"
Пример
Рассмотрим пример, где fmt.GoStringer
возвращает строку с дополнительной информацией:
package main
import "fmt"
type Rectangle struct {
Width int
Height int
}
func (r Rectangle) GoString() string {
area := r.Width * r.Height
return fmt.Sprintf("Rectangle{Width:%d, Height:%d, Area:%d}",
r.Width, r.Height, area)
}
func main() {
rect := Rectangle{Width: 10, Height: 5}
fmt.Printf("%#v\n", rect)
}
Результат выполнения кода:
"Rectangle{Width:10, Height:5, Area:50}"
Пример
Если метод GoString не реализован,
то fmt использует стандартное форматирование
для %#v:
package main
import "fmt"
type Point struct {
X int
Y int
}
func main() {
p := Point{X: 3, Y: 4}
fmt.Printf("%#v\n", p)
}
Результат выполнения кода:
"main.Point{X:3, Y:4}"
Смотрите также
-
интерфейс
fmt.Stringer,
который управляет форматированием для%sи других спецификаторов -
спецификатор
%#v,
который выводит значение в синтаксисе Go -
интерфейс
fmt.Formatter,
который предоставляет полный контроль над форматированием -
спецификатор
%v,
который выводит значение в стандартном формате