1 回答

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()
- 1 回答
- 0 關(guān)注
- 106 瀏覽
添加回答
舉報(bào)