在围棋中,为什么不是';转换为字符串时,是否使用了stringer接口?
这将输出在围棋中,为什么不是';转换为字符串时,是否使用了stringer接口?,string,go,type-conversion,String,Go,Type Conversion,这将输出main.go:14:无法将f(类型foo)转换为类型string 因此,似乎将某些内容转换为字符串不会查看stinger接口。我猜这是因为casting是在比stringer接口更低的级别上实现的,不可能/很难将两者混合,但我不确定。有人能解释一下吗 另外,由于这是不可能的,在这种情况下,将我的结构转换为字符串的惯用方法是什么?我是自己调用.String()呢,还是调用fmt.Sprintf(“%s”,f),或者其他什么?围棋中没有强制转换,只有类型和类型 您所做的(T(Express
main.go:14:无法将f(类型foo)转换为类型string
因此,似乎将某些内容转换为字符串不会查看stinger接口。我猜这是因为casting是在比stringer接口更低的级别上实现的,不可能/很难将两者混合,但我不确定。有人能解释一下吗
另外,由于这是不可能的,在这种情况下,将我的结构转换为字符串的惯用方法是什么?我是自己调用.String()
呢,还是调用fmt.Sprintf(“%s”,f)
,或者其他什么?围棋中没有强制转换,只有类型和类型
您所做的(T(Expression)
)是一个转换,它有严格的规则,何时可以使用它以及结果是什么
有一些特定的规则适用于。因此,类型转换无法实现您想要的
最简单和首选的方法是自己调用该方法:
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)
}
如果您的struct
已经实现了Stringer
,那么fmt.Sprintf()
将是不必要的开销和复杂性。但是如果您对此没有保证,那么是的,fmt.Sprintf()
将是一般的方法
你可以问为什么
在规范级别,类型转换表达式未定义为自定义/用户创建的函数或方法的结果。与接口相比,Stringer
接口(类型Stringer接口{String()String}
)甚至不是内置类型
但是,尽管Stringer不是内置类型,但它仍然存在于某些软件包中(例如中),并通过各种方法或功能(例如和亲属)进行检查。Go中没有强制转换,而是类型和属性
您所做的(T(Expression)
)是一个转换,它有严格的规则,何时可以使用它以及结果是什么
有一些特定的规则适用于。因此,类型转换无法实现您想要的
最简单和首选的方法是自己调用该方法:
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)
}
如果您的struct
已经实现了Stringer
,那么fmt.Sprintf()
将是不必要的开销和复杂性。但是如果您对此没有保证,那么是的,fmt.Sprintf()
将是一般的方法
你可以问为什么
在规范级别,类型转换表达式未定义为自定义/用户创建的函数或方法的结果。与接口相比,Stringer
接口(类型Stringer接口{String()String}
)甚至不是内置类型
但是,尽管Stringer不是内置类型,但它仍然存在于某些软件包中(例如中),并通过各种方法或功能(例如和亲属)进行检查。是有意义的。谢谢你<代码>错误是唯一的内置接口
Stringer
是更正常的情况。有意义。谢谢你<代码>错误是唯一的内置接口<代码>纵梁是更正常的情况。