Текстовый вид значения в 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
явно при обычной печати структуры с таким
методом.