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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang:如何在界面中檢查導(dǎo)出的字段

golang:如何在界面中檢查導(dǎo)出的字段

Go
慕工程0101907 2022-11-08 15:23:11
精簡版:import (    "fmt"    "reflect")type StatusVal inttype Foo struct {    Name string    Age  int    art  string}func ListFields(a interface{}) {    v := reflect.ValueOf(a).Elem()    fmt.Printf(" Kind: %+v \n", v.Type())    for _, f := range reflect.VisibleFields(v.Type()) {        if f.IsExported() {            fmt.Printf(" Kind: %+v \n", f)        } else {            fmt.Printf(" Kind: %s \n", f.Name)        }    }}func main() {    var x Foo    ListFields(&x)}這段代碼有效,但我真正需要的是var x []Foo,我找不到一種方法讓它工作并在結(jié)構(gòu)切片的字段中檢查 IsExported。長版:我正在尋找生成一個通用的 sqlToStruct 函數(shù),我遇到了這個很棒的答案: Generalizing *sql.Rows Scan in Go我沒有在那里回復(fù)的聲譽。唯一的問題是,如果我的結(jié)構(gòu)有任何未導(dǎo)出的字段,它就會恐慌,我想檢查一下并返回一個要處理的錯誤,而不是讓它恐慌。另外:我在 go 中編碼的時間很短,如果我遺漏了一些絕對明顯的東西,請理解我來自哪里,并抱歉。
查看完整描述

1 回答

?
哆啦的時光機(jī)

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

func ListFields(a interface{}) {

    rt := reflect.TypeOf(a) // take type of a

    if rt.Kind() == reflect.Ptr {

        rt = rt.Elem() // use Elem to get the pointed-to-type

    }

    if rt.Kind() == reflect.Slice {

        rt = rt.Elem() // use Elem to get type of slice's element

    }

    if rt.Kind() == reflect.Ptr { // handle input of type like []*StructType

        rt = rt.Elem() // use Elem to get the pointed-to-type

    }

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

        return

    }


    fmt.Printf(" Kind: %+v \n", rt)

    for _, f := range reflect.VisibleFields(rt) {

        if f.IsExported() {

            fmt.Printf(" Kind: %+v \n", f)

        } else {

            fmt.Printf(" Kind: %s \n", f.Name)

        }

    }

}

https://go.dev/play/p/0J3VXmFPe87


查看完整回答
反對 回復(fù) 2022-11-08
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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