![](/img/trans.png)
[英]How to define a type conversion from std::string to a custom type?
[英]How to define type conversion to string for a custom type
我可以定义如何使用String()
将转换为字符串应用于我的自定义类型myint
吗? 以及如何做到这一点?
我期望将方法String()
定义为足够,因为它被fmt.Println()
使用,但显然不是被string()
使用。 这纯粹是一个理论问题,因为我正在学习 Go 并对这种行为感到惊讶。
这是一个显示该行为的示例:
package main
import (
"fmt"
)
type myint int
func (m myint) String() string {
return fmt.Sprintf("%d", m)
}
func main() {
var val myint = 42
mystr := "Testing: " + string(val)
fmt.Println(mystr, val)
}
哪个输出:
测试:* 42
但我期待:
测试:42 42
我可以定义如何使用
string()
将转换为字符串应用于我的自定义类型myint
吗? 以及如何做到这一点?
不,您不能“覆盖”转换行为。 它记录在Spec: Conversions中,这就是它的结尾。 String()
方法适用于fmt
package,因为fmt
package 是为了显式检查String() string
方法的存在而编写的。 转换不会那样做。
如果您需要自定义转换行为,请不要使用转换,而是在方法(或函数)中实现您的逻辑,并调用这些方法(或函数)。
因此,在您的示例中,您将编写:
mystr := "Testing: " + val.String()
你会得到你所期望的 output (在Go Playground上试试):
Testing: 42 42
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.