2 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
使用Value.Len和Value.Index迭代數(shù)組或切片:
func processData(l LotsOfSlices) {
v := reflect.ValueOf(l)
for i := 0; i < v.NumField(); i++ {
f := v.Field(i)
if f.Kind() != reflect.Slice {
continue
}
for i := 0; i < f.Len(); i++ {
e := f.Index(i)
s := e.FieldByName("F")
// Do something with s
}
}
}

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
如果您的結(jié)構(gòu)執(zhí)行類(lèi)似的最終結(jié)果(返回 int 或?qū)ψ址M(jìn)行操作)但對(duì)于每種結(jié)構(gòu)類(lèi)型都是唯一的,您可以在它們上定義函數(shù):
func (a *A) GetResult() int { // sums two numbers
return a.p1 + a.p2
}
func (b *B) GetResult() int { // subtracts two numbers
return b.p1 - b.p2
}
func (c *C) GetResult() int { // times two numbers
return c.p1 * c.p2
}
然后定義一個(gè)接口Operable
type Operable interface {
GetResult() int // shared function
}
然后創(chuàng)建一個(gè)接受接口作為參數(shù)的函數(shù),并且任何實(shí)現(xiàn)該接口中所有函數(shù)的結(jié)構(gòu)都可以作為參數(shù)被接受
func processOperable(o []Operable){
for _, v := range o{
v.GetResult() --> unique for each struct
}
}
- 2 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)