3 回答
TA贡献1818条经验 获得超3个赞
使用反射:
func RandomChoice(slice interface{}, r *rand.Rand) interface{} {
x := reflect.ValueOf(slice)
return x.Index(r.Intn(x.Len())).Interface()
}
TA贡献1876条经验 获得超5个赞
根据语言规范:
两种类型相同或不同。
如果两个命名类型的类型名称源自同一TypeSpec,则它们是相同的。命名类型和未命名类型始终是不同的。如果对应的类型文字相同,即它们具有相同的文字结构且对应的组件具有相同的类型,则两个未命名的类型相同。详细:
如果两个数组类型具有相同的元素类型和相同的数组长度,则它们是相同的。
如果两个切片类型具有相同的元素类型,则它们是相同的。
如果两个结构类型具有相同的字段序列,并且对应的字段具有相同的名称,相同的类型和相同的标记,则它们是相同的。两个匿名字段被认为具有相同的名称。来自不同程序包的小写字段名称始终是不同的。
如果两个指针类型具有相同的基本类型,则它们是相同的。
如果两个函数类型具有相同数量的参数和结果值,相应的参数和结果类型相同,并且两个函数都是可变参数,或者两个都不相同。参数名和结果名不需要匹配。
如果两个接口类型具有相同的方法集,相同的名称和相同的函数类型,则它们是相同的。来自不同程序包的小写方法名称始终是不同的。方法的顺序无关紧要。
如果两个映射类型具有相同的键和值类型,则它们是相同的。
如果两个通道类型具有相同的值类型和相同的方向,则它们是相同的。
和:
在以下任何一种情况下,可以将值x分配给类型T的变量(“ x可以分配给T”):
x的类型与T相同。
x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是命名类型。
T是接口类型,并且x实现T。
x是双向通道值,T是通道类型,x的类型V和T具有相同的元素类型,并且V或T中的至少一个不是命名类型。
x是预声明的标识符nil,T是指针,函数,切片,映射,通道或接口类型。
x是可由类型T的值表示的无类型常量。
任何值都可以分配给空白标识符。
您无法将[] MyType分配给[]接口{},将这两个结果结合在一起。
- 3 回答
- 0 关注
- 243 浏览
添加回答
举报