中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

go語(yǔ)言如何從結(jié)構(gòu)體中獲取某個(gè)字段的值

這篇文章主要介紹go語(yǔ)言如何從結(jié)構(gòu)體中獲取某個(gè)字段的值,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)羅莊,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

Go 語(yǔ)言提供了 user.Name 語(yǔ)法,來(lái)從 user 結(jié)構(gòu)體中獲取 Name 的值。 那么如果我們想將 Name 變成變量該如何做呢?

原型:getStructField(input interface{}, key string) (value interface{}, err error)

功能:從 input 結(jié)構(gòu)體中,取出 key 字段 對(duì)應(yīng)的值

代碼實(shí)現(xiàn):

package utils

import (

    "errors"

    "fmt"

    "reflect"

)

func GetStructStringField(input interface{}, key string) (value string, err error) {

    v, err := getStructField(input, key)

    if err != nil {

        return

    }

    value, ok := v.(string)

    if !ok {

        return value, errors.New("can't convert key'v to string")

    }

    return

}

 

func GetStructFloat64Field(input interface{}, key string) (value float64, err error) {

    v, err := getStructField(input, key)

    if err != nil {

        return

    }

    value, ok := v.(float64)

    if !ok {

        return value, errors.New("can't convert key'v to float64")

    }

    return

}

 

func getStructField(input interface{}, key string) (value interface{}, err error) {

    rv := reflect.ValueOf(input)

    rt := reflect.TypeOf(input)

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

        return value, errors.New("input must be struct")

    }

 

    keyExist := false

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

        curField := rv.Field(i)

        if rt.Field(i).Name == key {

            switch curField.Kind() {

            case reflect.String, reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8, reflect.Int, reflect.Float64, reflect.Float32:

                keyExist = true

                value = curField.Interface()

            default:

                return value, errors.New("key must be int float or string")

            }

        }

    }

    if !keyExist {

        return value, errors.New(fmt.Sprintf("key %s not found in %s's field", key, rt))

    }

    return

}

測(cè)試:

func TestGetStructFiled(t *testing.T) {

    user1 := User{

        ID:   1,

        NAME: "aaa",

    }

    v, err := GetStructStringField(user1, "NAME")

    fmt.Println(v, err)

}

測(cè)試結(jié)果

aaa <nil>

以上是go語(yǔ)言如何從結(jié)構(gòu)體中獲取某個(gè)字段的值的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享標(biāo)題:go語(yǔ)言如何從結(jié)構(gòu)體中獲取某個(gè)字段的值
網(wǎng)站鏈接:http://m.rwnh.cn/article36/jihopg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、電子商務(wù)、網(wǎng)站設(shè)計(jì)公司微信小程序、網(wǎng)站收錄、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
潮安县| 大庆市| 资中县| 荣昌县| 礼泉县| 新乐市| 武乡县| 当阳市| 神池县| 庄浪县| 成都市| 霍林郭勒市| 兴隆县| 松滋市| 宾阳县| 威宁| 喀喇沁旗| 精河县| 双鸭山市| 左权县| 托克逊县| 明星| 许昌市| 陇西县| 景泰县| 江油市| 宜城市| 云霄县| 句容市| 化德县| 清镇市| 克东县| 信宜市| 长武县| 滦南县| 镇坪县| 玛多县| 温州市| 重庆市| 平泉县| 若尔盖县|