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

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

將結(jié)構(gòu)切片轉(zhuǎn)換為字符串的二維切片

將結(jié)構(gòu)切片轉(zhuǎn)換為字符串的二維切片

Go
縹緲止盈 2022-04-26 19:45:29
我想從數(shù)據(jù)庫中獲取數(shù)據(jù)并寫入 excel假設(shè)我有一個(gè)像這樣的結(jié)構(gòu):type user struct {    ID    int64    Name  string    Age   int}我可以獲得指向用戶類型表單 DB 的切片的指針&[]user{}但我想將該切片轉(zhuǎn)換為字符串的二維切片[][]string{}這是我的代碼嘗試做這樣的工作:func toStrings(slice interface{}) [][]string {    switch reflect.TypeOf(slice).Elem().Kind() {    case reflect.Slice:        ret := [][]string{}        val := reflect.ValueOf(slice).Elem()        for i := 0; i < val.Len(); i++ {            tempSlice := []string{}            tempV := reflect.ValueOf(val.Index(i))            for j := 0; j < tempV.NumField(); j++ {                tempSlice = append(tempSlice, tempV.Field(j).String())            }            ret = append(ret, tempSlice)        }        return ret    }    return nil}但是從上面的代碼中我得到的是一個(gè)像[<*reflect.rtype Value> <unsafe.Pointer Value> <reflect.flag Value>]我哪里做錯(cuò)了?
查看完整描述

3 回答

?
HUX布斯

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

對(duì)不起,我發(fā)現(xiàn)我做錯(cuò)了,我tempV錯(cuò)了


func toStrings(slice interface{}) [][]string {

    switch reflect.TypeOf(slice).Elem().Kind() {

    case reflect.Slice:

        ret := [][]string{}

        val := reflect.ValueOf(slice).Elem()

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


            tempSlice := []string{}


            // tempV should be:

            tempV := val.Index(i)

            // instead of reflect.ValueOf(val.Index(i))


            for j := 0; j < tempV.NumField(); j++ {

                tempSlice = append(tempSlice, tempV.Field(j).String())

            }


            ret = append(ret, tempSlice)

        }

        return ret

    }

    return nil


}


查看完整回答
反對(duì) 回復(fù) 2022-04-26
?
千巷貓影

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

也許我有一個(gè)簡(jiǎn)單的方法來解決問題,golang playground here


我曾經(jīng)encoding/json轉(zhuǎn)換為json數(shù)據(jù),然后將其轉(zhuǎn)換為map[string]interface{}。


func toStrings2(slice interface{}) [][]string {

    jsonData, _ := json.Marshal(slice)

    var out []map[string]interface{}

    _ = json.Unmarshal(jsonData, &out)

    var fields []string

    if len(out) > 0 {

        for k := range out[0] {

            fields = append(fields, k)

        }

    }

    var ret [][]string

    for _, row := range out {

        var r []string

        for _, k := range fields {

            r = append(r, fmt.Sprint(row[k]))

        }

        ret = append(ret, r)

    }

    return ret

}

注意:


在@CeriseLimón 的幫助下,我知道此答案中的代碼無法處理 User.ID 的大值。


查看完整回答
反對(duì) 回復(fù) 2022-04-26
?
慕田峪7331174

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

問題中的代碼有兩個(gè)問題。第一個(gè)問題是 slice 元素被表達(dá)式中的 aa reflect.Value 雙重包裹reflect.Value(val.Index(i))。通過刪除對(duì) reflect.Value 的額外調(diào)用來修復(fù)。第二個(gè)問題是reflect.Value String方法不會(huì)將基礎(chǔ)值轉(zhuǎn)換為其字符串表示形式。使用 fmt.Sprint(或其朋友之一)來做到這一點(diǎn)。


試試這個(gè):


func toStrings(slice interface{}) [][]string {

    // Get reflect value for slice. Use Indirect to

    // handle slice argument and pointer to slice

    // argument.

    v := reflect.Indirect(reflect.ValueOf(slice))

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

        return nil

    }


    var result [][]string


    // For each element...

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


        // Get reflect value for slice element (a struct). Use

        // Indirect to handle slice of struct and slice of

        // pointer to struct.

        e := reflect.Indirect(v.Index(i))

        if e.Kind() != reflect.Struct {

            return nil

        }


        // Convert fields to string and append.

        var element []string

        for i := 0; i < e.NumField(); i++ {

            // Use fmt.Sprint to convert arbitrary Go value

            // to a string.

            element = append(element, fmt.Sprint(e.Field(i).Interface()))

        }


        result = append(result, element)

    }

    return result

}


查看完整回答
反對(duì) 回復(fù) 2022-04-26
  • 3 回答
  • 0 關(guān)注
  • 180 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)