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

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

我可以得到一個(gè)字段是否已經(jīng)在 golang 中分配了反射

我可以得到一個(gè)字段是否已經(jīng)在 golang 中分配了反射

Go
紅糖糍粑 2023-04-24 16:15:25
我有一個(gè)結(jié)構(gòu)如下:type Demo struct{      A string      B string}我有一個(gè)實(shí)例如下:demo := Demo{A:"a"}A的字段已顯式分配值,但字段B未分配值?,F(xiàn)在,我想知道是否存在一些方法可以通過反射獲取實(shí)例A的字段?在這里,我想獲得字段A。
查看完整描述

1 回答

?
叮當(dāng)貓咪

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

無法確定某個(gè)字段是否顯式分配了一個(gè)值,但可以確定是否存在不等于該字段零值的字段。


遍歷字段。如果字段的值不等于字段類型的零值,則返回 true。


func hasNonZeroField(s interface{}) bool {

    v := reflect.ValueOf(s)

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

        v = v.Elem()

    }

    t := v.Type()

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

        sf := t.Field(i)

        fv := v.Field(i)

        switch sf.Type.Kind() {

        case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:

            if !fv.IsNil() {

                return true

            }

        case reflect.Struct:

            if hasNonZeroField(fv.Interface()) {

                return true

            }

        // case reflect.Array:

        // TODO: call recursively for array elements

        default:

            if reflect.Zero(sf.Type).Interface() != fv.Interface() {

                return true

            }

        }

    }

    return false

}

在操場上運(yùn)行它。



查看完整回答
反對 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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