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

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

如何對(duì)作為切片的 interface{} 進(jìn)行子切片?

如何對(duì)作為切片的 interface{} 進(jìn)行子切片?

Go
慕容3067478 2021-07-28 17:18:12
該datastore.GetMulti(c appengine.Context, key []*Key, dst interface{})API可以讓我得到最多1000元。我想得到更多。一般解決這個(gè)問題的一個(gè)明顯方法是創(chuàng)建一個(gè)包裝函數(shù)mypkg.GetMulti(),它對(duì)key[0:1000], key[1000:2000]...原始參數(shù)進(jìn)行子切片 ( ) 并datastore.GetMulti()使用它們多次調(diào)用。很清楚如何 sub slice key []*Key,但我如何細(xì)分dst interface{}可能是:// dst must be a []S, []*S, []I or []P, for some struct type S, some interface// type I, or some non-interface non-pointer type P such that P or *P// implements PropertyLoadSaver. If an []I, each element must be a valid dst// for Get: it must be a struct pointer or implement PropertyLoadSaver.//// As a special case, PropertyList is an invalid type for dst, even though a// PropertyList is a slice of structs. It is treated as invalid to avoid being// mistakenly passed when []PropertyList was intended.
查看完整描述

1 回答

?
拉風(fēng)的咖菲貓

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)

}


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

添加回答

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