第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試對切片使用interface {}以選擇隨機元素

嘗試對切片使用interface {}以選擇隨機元素

Go
三國紛爭 2021-05-14 18:43:53
我一直在嘗試實現(xiàn)一個可以從任何類型的切片中隨機選擇一個元素的函數(shù)(例如python的random.choice函數(shù))func RandomChoice(a []interface{}, r *rand.Rand) interface{} {    i := r.Int()%len(a)    return a[i]}但是,當我嘗試將[] float32類型的切片傳遞到第一個參數(shù)中時,會發(fā)生此錯誤:cannot use my_array (type []float32) as type []interface {} in function argument這是對接口{}的根本性濫用嗎?有什么更好的方法嗎?
查看完整描述

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()

}


查看完整回答
反對 回復 2021-05-31
?
慕運維8079593

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é)合在一起。


查看完整回答
反對 回復 2021-05-31
  • 3 回答
  • 0 關注
  • 293 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號