在围棋中,为什么不是';转换为字符串时,是否使用了stringer接口?

在围棋中,为什么不是';转换为字符串时,是否使用了stringer接口?,string,go,type-conversion,String,Go,Type Conversion,这将输出main.go:14:无法将f(类型foo)转换为类型string 因此,似乎将某些内容转换为字符串不会查看stinger接口。我猜这是因为casting是在比stringer接口更低的级别上实现的,不可能/很难将两者混合,但我不确定。有人能解释一下吗 另外,由于这是不可能的,在这种情况下,将我的结构转换为字符串的惯用方法是什么?我是自己调用.String()呢,还是调用fmt.Sprintf(“%s”,f),或者其他什么?围棋中没有强制转换,只有类型和类型 您所做的(T(Express

这将输出
main.go:14:无法将f(类型foo)转换为类型string

因此,似乎将某些内容转换为字符串不会查看stinger接口。我猜这是因为casting是在比stringer接口更低的级别上实现的,不可能/很难将两者混合,但我不确定。有人能解释一下吗

另外,由于这是不可能的,在这种情况下,将我的结构转换为字符串的惯用方法是什么?我是自己调用
.String()
呢,还是调用
fmt.Sprintf(“%s”,f)
,或者其他什么?

围棋中没有强制转换,只有类型和类型

您所做的(
T(Expression)
)是一个转换,它有严格的规则,何时可以使用它以及结果是什么

有一些特定的规则适用于。因此,类型转换无法实现您想要的

最简单和首选的方法是自己调用该方法:

package main

type foo struct {
    bar string
    baz string
}

func (f foo) String() string {
    return f.bar + " " + f.baz
}

func main() {
    f := foo{"hello", "world"}
    v := string(f)
}
如果您的
struct
已经实现了
Stringer
,那么
fmt.Sprintf()
将是不必要的开销和复杂性。但是如果您对此没有保证,那么是的,
fmt.Sprintf()
将是一般的方法

你可以问为什么

在规范级别,类型转换表达式未定义为自定义/用户创建的函数或方法的结果。与接口相比,
Stringer
接口(
类型Stringer接口{String()String}
)甚至不是内置类型

但是,尽管Stringer不是内置类型,但它仍然存在于某些软件包中(例如中),并通过各种方法或功能(例如和亲属)进行检查。

Go中没有强制转换,而是类型和属性

您所做的(
T(Expression)
)是一个转换,它有严格的规则,何时可以使用它以及结果是什么

有一些特定的规则适用于。因此,类型转换无法实现您想要的

最简单和首选的方法是自己调用该方法:

package main

type foo struct {
    bar string
    baz string
}

func (f foo) String() string {
    return f.bar + " " + f.baz
}

func main() {
    f := foo{"hello", "world"}
    v := string(f)
}
如果您的
struct
已经实现了
Stringer
,那么
fmt.Sprintf()
将是不必要的开销和复杂性。但是如果您对此没有保证,那么是的,
fmt.Sprintf()
将是一般的方法

你可以问为什么

在规范级别,类型转换表达式未定义为自定义/用户创建的函数或方法的结果。与接口相比,
Stringer
接口(
类型Stringer接口{String()String}
)甚至不是内置类型


但是,尽管Stringer不是内置类型,但它仍然存在于某些软件包中(例如中),并通过各种方法或功能(例如和亲属)进行检查。

是有意义的。谢谢你<代码>错误是唯一的内置接口
Stringer
是更正常的情况。有意义。谢谢你<代码>错误是唯一的内置接口<代码>纵梁是更正常的情况。