rpk*_*amp 1 string type-conversion go
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)
,还是其他?
您正在做的(T(Expression)
)是转换,它具有严格的规则,何时可以使用它以及结果将是什么。
对于与字符串类型之间的转换有特定的规则。因此,类型转换无法实现您想要的功能。
最简单和首选的方法是自己调用该方法:
v := f.String()
Run Code Online (Sandbox Code Playgroud)
fmt.Sprintf()
如果您struct
已经实现的话,那只会是不必要的开销和复杂性Stringer
。但是,如果您对此没有保证,那是fmt.Sprintf()
一般的方法。
你可以问为什么?
在规范级别,类型转换表达式未定义为自定义/用户创建的函数或方法的结果。与Stringer
接口相比,接口(type Stringer interface{String() string}
)甚至不是内置类型error
。
但是,尽管它Stringer
不是内置类型,但它仍存在于某些程序包中(例如在中fmt.Stringer
),并通过各种方法或功能(例如fmt.Printf()
,亲戚)进行检查。
归档时间: |
|
查看次数: |
543 次 |
最近记录: |