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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我可以將 struct slice 指針作為 []interface 指針傳遞嗎

我可以將 struct slice 指針作為 []interface 指針傳遞嗎

Go
富國(guó)滬深 2022-07-11 16:46:00
我可以將結(jié)構(gòu)切片指針作為接口切片指針傳遞嗎?https://play.golang.org/p/EyhGYknZvT2func (r *Randomizer) ShuffleAry(ary *[]interface{}) (v []interface{}) {    r.mu.Lock()    tmp := make([]int, len(*ary))    v = make([]interface{}, len(*ary))    for index := range tmp {        tmp[index] = index    }    // v = append(v, *ary...)    r.rand.Shuffle(len(tmp), func(i, j int) { tmp[i], tmp[j] = tmp[j], tmp[i] })    for index, newIndex := range tmp {        v[index] = (*ary)[newIndex]    }    r.mu.Unlock()    return}收到cannot use &txx (type *[]Tx) as type *[]interface {} in argument to r.ShuffleAry錯(cuò)誤消息
查看完整描述

1 回答

?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

沒(méi)有將任意切片類型自動(dòng)轉(zhuǎn)換為[]interface{}. 有關(guān)更多信息,請(qǐng)參閱常見(jiàn)問(wèn)題解答。


您可以使用反射包來(lái)解決問(wèn)題:


// Shuffle shuffles the slice src to the slice pointed to by dstp.

func (r *Randomizer) Shuffle(dstp interface{}, src interface{}) {


    // Create reflect values for each of the slices.

    dv := reflect.ValueOf(dstp).Elem()

    sv := reflect.ValueOf(src)


    // Make the destination slice and copy to it.

    dv.Set(reflect.MakeSlice(dv.Type(), sv.Len(), sv.Len()))

    reflect.Copy(dv, sv)


    // Shuffle the destination.

    r.mu.Lock()

    r.rand.Shuffle(dv.Len(), reflect.Swapper(dv.Interface()))

    r.mu.Unlock()

}  

像這樣使用它:


r := NewRandomizer()

var rtx []Tx

r.Shuffle(&rtx, txx)

在 Go Playground 上運(yùn)行它。


如果您在適當(dāng)?shù)奈恢秒S機(jī)化,代碼會(huì)更簡(jiǎn)單一些:


// Shuffle shuffles the slice pointed to by sp.

func (r *Randomizer) Shuffle(s interface{}) {

    v := reflect.ValueOf(s)

    r.mu.Lock()

    r.rand.Shuffle(v.Len(), reflect.Swapper(v.Interface()))

    r.mu.Unlock()

}

在 Go Playground 上運(yùn)行它。\


我還應(yīng)該指出,直接編寫(xiě)代碼并沒(méi)有那么糟糕:


r := NewRandomizer()

rtx := append([]Tx(nil), txx...) // copy txx to rtx.

r.mu.Lock()

r.rand.Shuffle(len(rtx), reflect.Swapper(rtx))

r.mu.Unlock()


查看完整回答
反對(duì) 回復(fù) 2022-07-11
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)