1 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
由于您是datastore.GetMulti接受interface{}參數(shù)的調(diào)用者,因此您可以提供任何具體值作為該參數(shù);它不需要事先轉(zhuǎn)換為空接口類型。換句話說,任何東西都實(shí)現(xiàn)了空接口,所以只需傳遞那個(gè)東西。
func GetMulti() {
mySlice := make([]Whatever, 3000, 3000)
for i := 0; i < 3; i++ {
subSlice := mySlice[i * 1000 : (i + 1) * 1000]
datastore.GetMulti(c,k, subSlice) // 'c' and 'k' assumed to be defined
}
}
如果mypkg.GetMulti應(yīng)該是一個(gè)通用函數(shù),也取一個(gè)interface{}值,那么您必須使用反射,如下例所示,而不是使用每個(gè)子切片fmt.Println調(diào)用的子切片長(zhǎng)度datastore.GetMulti:
package main
import "fmt"
import "reflect"
func GetMulti(i interface{}) {
v := reflect.ValueOf(i)
if v.Kind() != reflect.Slice {
panic("argument not a slice")
}
l := v.Len()
p := (l / 1000)
for i := 0; i < p; i++ {
fmt.Println(v.Slice(i*1000, (i+1)*1000).Len())
}
fmt.Println(v.Slice(p*1000, l).Len())
}
func main() {
s := make([]int, 3560, 3560)
GetMulti(s)
}
- 1 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報(bào)