Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何为自定义类型定义类型转换为字符串_String_Go_Type Conversion - Fatal编程技术网

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