如何定义自定义类型到字符串的类型转换

我可以定义如何将 using 转换为字符串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


噜噜哒
浏览 106回答 1
1回答

四季花海

我可以定义如何将 using 转换为字符串string()应用于我的自定义类型吗myint?以及如何做到这一点?不,您不能“覆盖”转化行为。它被记录在Spec: Conversions中,这就是它的结束。该String()方法适用于fmt包,因为fmt编写包是为了显式检查该String() string方法是否存在。转换不会这样做。如果您需要自定义转换行为,请不要使用转换,而是在方法(或函数)中实现逻辑,并调用这些方法(或函数)。所以在你的例子中你会写:mystr := "Testing: " + val.String()您将得到预期的输出(在Go Playground上尝试):Testing: 42 42
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go