Go types.AssertableTo、types.AssignableTo和types.ConvertibleTo之间有什么区别?

Go types.AssertableTo、types.AssignableTo和types.ConvertibleTo之间有什么区别?,go,Go,func AssertableTo(V*接口,T型)bool是这样的: AssertableTo报告类型V的值是否可以断言为类型T 可分配给(V,T型)布尔函数的函数如下所示: AssignableTo报告V类型的值是否可分配给T类型的变量 最后,还有func-ConvertibleTo(V,T-Type)bool(): ConvertibleTo报告类型V的值是否可转换为类型T的值 从描述来看,它们似乎在做同样的事情,所以如果我需要在运行时检查变量是否具有特定类型,我不清楚选择哪一个。在哪些情

func AssertableTo(V*接口,T型)bool
是这样的:

AssertableTo报告类型V的值是否可以断言为类型T

可分配给(V,T型)布尔函数的函数如下所示:

AssignableTo报告V类型的值是否可分配给T类型的变量

最后,还有
func-ConvertibleTo(V,T-Type)bool
():

ConvertibleTo报告类型V的值是否可转换为类型T的值


从描述来看,它们似乎在做同样的事情,所以如果我需要在运行时检查变量是否具有特定类型,我不清楚选择哪一个。在哪些情况下我不能得到预期的结果?

语言规范描述了问题中列出的函数背后的概念:

这些函数都不会告诉您值的类型是否等于其他类型。此外,这些方法在运行时都不适用

比较
reflect.Type
值以确定两种类型在运行时是否相同

这里有一个例子。以下代码行获取任意类型
T
reflect.Type

t := reflect.TypeOf((*T)(nil)).Elem()
要确定
反射.Value
是否具有类型
T
,只需比较类型:

var x T
v := reflect.ValueOf(x)
fmt.Println(v.Type() == t) // prints true for all concrete types T.
,