小编rpk*_*amp的帖子

为什么字符串函数没有在字符串类型上定义?

我只是想知道为什么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类型了,但我找不到任何支持.

string go

6
推荐指数
1
解决办法
142
查看次数

在Go中,为什么在转换为字符串时不使用Stringer接口?

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),还是其他?

string type-conversion go

1
推荐指数
1
解决办法
543
查看次数

标签 统计

go ×2

string ×2

type-conversion ×1