我只是想知道为什么Google Go中的字符串函数是在strings包中定义的,而不是string数据类型本身.他们可以轻松完成
func (s string) ToUpper() string {
}
Run Code Online (Sandbox Code Playgroud)
而不是当前
func ToUpper(s string) string {
}
Run Code Online (Sandbox Code Playgroud)
在strings包中.
我的猜测是,如果你想ToUpper在扩展的自定义类型上实现自定义版本string(即type MyString string),你就无法再访问内置ToUpper类型了,但我找不到任何支持.
package main
type foo struct {
bar string
baz string
}
func (f foo) String() string {
return f.bar + " " + f.baz
}
func main() {
f := foo{"hello", "world"}
v := string(f)
}
Run Code Online (Sandbox Code Playgroud)
这输出main.go:14: cannot convert f (type foo) to type string。
因此,将某些内容强制转换为字符串似乎并不关注stinger接口。我的猜测是,这是因为强制转换是在比Stringer接口更低的级别上实现的,并且不可能/很难将两者混合使用,但是我不确定。谁能对此有所启示?
另外,由于这是不可能的,在这种情况下,将结构转换为字符串的惯用方式是什么?我只是称呼.String()自己,还是fmt.Sprintf("%s", f),还是其他?