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

Интерфейс fmt.Stringer

Интерфейс fmt.Stringer определен в пакете fmt и позволяет управлять строковым представлением пользовательских типов. Он содержит единственный метод String, который возвращает строку. Когда тип реализует этот интерфейс, функции пакета fmt, такие как fmt.Print, fmt.Println и fmt.Sprintf, будут использовать метод String для получения строкового представления значения.

Синтаксис

type Stringer interface { String() string }

Пример

Давайте реализуем интерфейс fmt.Stringer для пользовательской структуры User:

package main import "fmt" type User struct { Name string Age int } func (u User) String() string { return fmt.Sprintf("User: %s, Age: %d", u.Name, u.Age) } func main() { user := User{Name: "John", Age: 30} fmt.Println(user) }

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

"User: John, Age: 30"

Пример

Реализация fmt.Stringer для типа IPAddress для форматированного вывода IP-адреса:

package main import "fmt" type IPAddress [4]byte func (ip IPAddress) String() string { return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]) } func main() { ip := IPAddress{192, 168, 1, 1} fmt.Println(ip) }

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

"192.168.1.1"

Пример

Интерфейс fmt.Stringer также работает с указателями. Рассмотрим реализацию для структуры Rectangle:

package main import "fmt" type Rectangle struct { Width int Height int } func (r *Rectangle) String() string { return fmt.Sprintf("Rectangle (width: %d, height: %d)", r.Width, r.Height) } func main() { rect := &Rectangle{Width: 10, Height: 5} fmt.Println(rect) }

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

"Rectangle (width: 10, height: 5)"

Пример

Если тип не реализует fmt.Stringer, то fmt.Println выводит значение в формате по умолчанию. Сравним поведение:

package main import "fmt" type Point struct { X int Y int } type PointStringer struct { X int Y int } func (p PointStringer) String() string { return fmt.Sprintf("(%d, %d)", p.X, p.Y) } func main() { p1 := Point{X: 3, Y: 4} p2 := PointStringer{X: 3, Y: 4} fmt.Println("Without Stringer:", p1) fmt.Println("With Stringer:", p2) }

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

"Without Stringer: {3 4}" "With Stringer: (3, 4)"

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

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