ToString() в Go
Функция strings.Join
принимает только фрагменты строк:
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
Но было бы неплохо иметь возможность передавать произвольные объекты, реализующие функцию ToString()
.
type ToStringConverter interface {
ToString() string
}
Есть ли что-то вроде этого в Go или мне нужно украсить существующие типы типа int
с помощью методов ToString и написать обертку вокруг strings.Join
?
func Join(a []ToStringConverter, sep string) string
Ответы
Ответ 1
Прикрепите метод String() string
к любому именованному типу и воспользуйтесь любой пользовательской функцией "ToString":
package main
import "fmt"
type bin int
func (b bin) String() string {
return fmt.Sprintf("%b", b)
}
func main() {
fmt.Println(bin(42))
}
Игровая площадка: http://play.golang.org/p/Azql7_pDAA
Выход
101010
Ответ 2
Когда у вас есть собственный struct
, у вас может быть собственная функция преобразования в строку.
package main
import (
"fmt"
)
type Color struct {
Red int `json:"red"`
Green int `json:"green"`
Blue int `json:"blue"`
}
func (c Color) String() string {
return fmt.Sprintf("[%d, %d, %d]", c.Red, c.Green, c.Blue)
}
func main() {
c := Color{Red: 123, Green: 11, Blue: 34}
fmt.Println(c) //[123, 11, 34]
}
Ответ 3
Я предпочитаю что-то вроде следующего:
type StringRef []byte
func (s StringRef) String() string {
return string(s[:])
}
…
// rather silly example, but ...
fmt.Printf("foo=%s\n",StringRef("bar"))