string не реализует интерфейс Stringer golang
Допустим я хочу написать функцию конкатенации строк и любых других объектов, приводимых к строкам. Хотел я написать это вот так:
package main
import "fmt"
func concatenate(s1 fmt.Stringer, s2 fmt.Stringer) string {
return s1.String() + s2.String()
}
func main() {
concatenate("q", "w")
}
Но обнаружил, что string
не реализует интерфейс Stringer
В связи с этим возникает 2 вопроса
- Можно ли реализовать мою задумку красиво? Я придумал такой вариант:
package main
import "fmt"
type StringStringer struct {
value string
}
func (str StringStringer) String() string {
return str.value
}
func concatenate(s1 fmt.Stringer, s2 fmt.Stringer) string {
return s1.String() + s2.String()
}
func main() {
s1 := StringStringer{"q"}
s2 := StringStringer{"w"}
concatenate(s1, s2)
}
Но все-таки получается как-будто лишний код, мне это не очень нравиться.
- Почему разработчики
go
не добавили методString()
к строкам? Мне кажется это было бы очень логично, хотя я, конечно, могу ошибаться.