如何为“执行Go/Golang类型断言?”;键入MyString字符串“?”;?

如何为“执行Go/Golang类型断言?”;键入MyString字符串“?”;?,go,Go,如果我想知道变量是否为string类型,我可以执行类型断言: S, OK:= value.(string) 如果值的类型为string,则Ok为true,S为原始值 但是这种类型断言不适用于自定义字符串类型;例如: type MyString string 对于这种类型的变量,上面的类型断言返回false表示OK 如何确定变量是字符串类型还是等效类型,而不对每个此类等效类型进行单独的断言?您无法对字符串执行类型断言或类型切换,因为确切类型不匹配。最接近的方法是使用包并检查值: 为什么要使用断

如果我想知道变量是否为string类型,我可以执行类型断言:

S, OK:= value.(string)
如果值的类型为string,则Ok为true,S为原始值

但是这种类型断言不适用于自定义字符串类型;例如:

type MyString string
对于这种类型的变量,上面的类型断言返回false表示OK


如何确定变量是字符串类型还是等效类型,而不对每个此类等效类型进行单独的断言?

您无法对字符串执行类型断言或类型切换,因为确切类型不匹配。最接近的方法是使用包并检查值:


为什么要使用断言,它是用于接口的。尝试如下转换:

type MyString string

var s MyString = "test"
var t string

t = string(s)

你不能。正如你所知,你可以测试“beeing string”,比如
value.(string)
,或者你可以测试“being MyString`with
value.(MyString)
,但你不能同时测试两者。或者你可以使用一个类型开关。再次浏览Go,特别是关于类型开关的章节:和ff.来代替最后一行(“S=ref.string()”),我可以简单地说“S=value”吗?@MartinDelVecchio:不,因为
S
的类型与
value
的类型不同。好的。我的目标是避免调用value.String()或其等价物,因为它已经是一个字符串。如何将MyString类型的变量转换为String类型的变量?Does“String(value)“做吗?”TimCooper谢谢你的回答。在检查确切的类型时,你能解释为什么类型开关不准确吗?@nexus66:“x.(t)断言x的动态类型与类型t相同”它是一个接口;我有一个接受任意值的函数(参数值的类型为interface{}),我想返回一个字符串。对于实际的字符串变量和等效类型的变量(例如MyString),我希望尽可能高效地返回原始值。对于其他(int、struct等),我将不得不使用String()方法或fmt.Sprintf()等。我知道,在这种情况下,只有反射才能解决问题
type MyString string

var s MyString = "test"
var t string

t = string(s)