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

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

在 Go 中實(shí)現(xiàn) struct-to-csv 編寫器

在 Go 中實(shí)現(xiàn) struct-to-csv 編寫器

Go
慕妹3146593 2022-10-17 15:37:23
以下代碼嘗試為任何簡(jiǎn)單結(jié)構(gòu)實(shí)現(xiàn)通用 CSV 編寫器?!昂?jiǎn)單”是指結(jié)構(gòu)的字段值是標(biāo)準(zhǔn)的簡(jiǎn)單類型(int、string 等)。type (    CSV interface {        Header() []string        String([]string) (string, error)    }    CSVArray []CSV)func CSVOutput(w io.Writer, data CSVArray, cols []string) error {    if len(data) == 0 {        return nil    }    _, err := fmt.Fprintln(w, data[0].Header())    if err != nil {        return err    }    for _, d := range data {        str, err := d.String(cols)        if err != nil {            return err        }        _, err = fmt.Fprintln(w, str)        if err != nil {            return err        }    }    return nil}問(wèn)題是CSVOutput()實(shí)際上不起作用。例如:var data []Employee //the Employee struct implements CSV interfaceCSVOutput(w, data, nil)編譯失敗:cannot use data (type []Employee) as type CSVArray in argument to CSVOutput我了解 []CSV 與 []Employee 不同,如此處所述,以及許多其他在線可用資源。也就是說(shuō),是否可以CSVOutput()使用反射重寫函數(shù):func CSVOutput(w io.Writer, data interfac{}, cols []string) error {    sliceOfIntf = castToSlice(data) //how to do this?    if !implementedCSV(sliceOfIntf[0]) { //and how to do this?        return errors.New("not csv")    }    ... ...}
查看完整描述

1 回答

?
慕容森

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

是否可以使用反射重寫 CSVOutput() 函數(shù)


是的


// if data is []Employee{...}, then you can do the following:


rv := reflect.ValueOf(data)

if rv.Kind() != reflect.Slice {

    return fmt.Errorf("data is not slice")

}

if !rv.Type().Elem().Implements(reflect.TypeOf((*CSV)(nil)).Elem()) {

    return fmt.Errorf("slice element does not implement CSV")

}


csvArr := make(CSVArray, rv.Len())

for i := 0; i < rv.Len(); i++ {

    csvArr[i] = rv.Index(i).Interface().(CSV)

}


// now csvArr is CSVArray containing all the elements of data

https://go.dev/play/p/gcSOid533gx


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

添加回答

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