Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpIfSt 33 of 280 menu
◀ ▶

Текстовый вид значения в Go

Если у значения есть метод с именем String без параметров, печать берет текст из него. Метод возвращает string, и стандартная функция вывода подставляет этот текст вместо обычного вида структуры с именами полей. В стандартной библиотеке для такого метода есть интерфейс fmt.Stringer с одним методом String.

Сделаем метку с собственным текстом для экрана:

package main import "fmt" type Label struct { Text string } func (l Label) String() string { return "label: " + l.Text } func main() { item := Label{Text: "go"} fmt.Println(item) }

На экране строка "label: go", а не структура с полем Text. Вызов String происходит внутри печати, его не нужно писать в main вручную.

Метод можно повесить с получателем-значением, если он только читает поля. Для больших структур иногда берут указатель, но правило то же: имя String и результат string.

Дана структура:

package main import "fmt" type Score struct { Points int }

Добавьте метод String, который возвращает текст "score" и число очков, создайте значение с 7 и выведите его.

Дан следующий код:

package main import "fmt" type Pair struct { A int B int } func (p Pair) String() string { return fmt.Sprintf("%d/%d", p.A, p.B) }

Создайте Pair с 3 и 9 и выведите его одной командой печати.

Скажите, вызывается ли метод String явно при обычной печати структуры с таким методом.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить