繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM