String 如何为自定义类型定义类型转换为字符串
我可以定义如何使用String 如何为自定义类型定义类型转换为字符串,string,go,type-conversion,String,Go,Type Conversion,我可以定义如何使用string()将转换为字符串应用于我的自定义类型myint?如何做到这一点 我希望定义方法String()就足够了,因为它被fmt.Println()使用,但显然不是被String()使用。这纯粹是一个理论问题,因为我正在学习围棋,并对这种行为感到惊讶 下面是一个显示行为的示例: package main import ( "fmt" ) type myint int func (m myint) String() string { return fmt
string()
将转换为字符串应用于我的自定义类型myint
?如何做到这一点
我希望定义方法String()
就足够了,因为它被fmt.Println()
使用,但显然不是被String()
使用。这纯粹是一个理论问题,因为我正在学习围棋,并对这种行为感到惊讶
下面是一个显示行为的示例:
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
我可以定义如何使用string()
将转换为字符串应用于我的自定义类型myint
?如何做到这一点
不,您不能“覆盖”转换行为。它被记录下来了,就这样结束了。String()。转换不能做到这一点
如果需要自定义转换行为,不要使用转换,而是在方法(或函数)中实现逻辑,并调用这些方法(或函数)
因此,在您的示例中,您会写:
mystr := "Testing: " + val.String()
您将获得您的预期输出(在上尝试):
“我期待着[…]”。语言规范或围棋之旅的哪一部分让你想到了这一点?@Volker这是一种直觉,因为我认为string()
将使用与fmt.Println()
相同的机制,这一旅程让我认为stringer比它实际是什么更重要。。。Python也有这种行为。构造string(x)
不是函数调用,而是类型转换,因为string
不是函数而是类型。技术上fmt
查找。
Testing: 42 42