3 回答

TA貢獻1818條經(jīng)驗 獲得超3個贊
使用反射:
func RandomChoice(slice interface{}, r *rand.Rand) interface{} {
x := reflect.ValueOf(slice)
return x.Index(r.Intn(x.Len())).Interface()
}

TA貢獻1876條經(jīng)驗 獲得超5個贊
根據(jù)語言規(guī)范:
兩種類型相同或不同。
如果兩個命名類型的類型名稱源自同一TypeSpec,則它們是相同的。命名類型和未命名類型始終是不同的。如果對應的類型文字相同,即它們具有相同的文字結(jié)構(gòu)且對應的組件具有相同的類型,則兩個未命名的類型相同。詳細:
如果兩個數(shù)組類型具有相同的元素類型和相同的數(shù)組長度,則它們是相同的。
如果兩個切片類型具有相同的元素類型,則它們是相同的。
如果兩個結(jié)構(gòu)類型具有相同的字段序列,并且對應的字段具有相同的名稱,相同的類型和相同的標記,則它們是相同的。兩個匿名字段被認為具有相同的名稱。來自不同程序包的小寫字段名稱始終是不同的。
如果兩個指針類型具有相同的基本類型,則它們是相同的。
如果兩個函數(shù)類型具有相同數(shù)量的參數(shù)和結(jié)果值,相應的參數(shù)和結(jié)果類型相同,并且兩個函數(shù)都是可變參數(shù),或者兩個都不相同。參數(shù)名和結(jié)果名不需要匹配。
如果兩個接口類型具有相同的方法集,相同的名稱和相同的函數(shù)類型,則它們是相同的。來自不同程序包的小寫方法名稱始終是不同的。方法的順序無關緊要。
如果兩個映射類型具有相同的鍵和值類型,則它們是相同的。
如果兩個通道類型具有相同的值類型和相同的方向,則它們是相同的。
和:
在以下任何一種情況下,可以將值x分配給類型T的變量(“ x可以分配給T”):
x的類型與T相同。
x的類型V和T具有相同的基礎類型,并且V或T中的至少一個不是命名類型。
T是接口類型,并且x實現(xiàn)T。
x是雙向通道值,T是通道類型,x的類型V和T具有相同的元素類型,并且V或T中的至少一個不是命名類型。
x是預聲明的標識符nil,T是指針,函數(shù),切片,映射,通道或接口類型。
x是可由類型T的值表示的無類型常量。
任何值都可以分配給空白標識符。
您無法將[] MyType分配給[]接口{},將這兩個結(jié)果結(jié)合在一起。
- 3 回答
- 0 關注
- 293 瀏覽
添加回答
舉報