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

Интерфейс 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,
    который выводит значение в стандартном формате
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить