亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

我可以得到一個字段是否已經在 golang 中分配了反射

我可以得到一個字段是否已經在 golang 中分配了反射

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

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

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


遍歷字段。如果字段的值不等于字段類型的零值,則返回 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

}

在操場上運行它



查看完整回答
反對 回復 2023-04-24
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號