溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量

發(fā)布時間:2021-07-07 14:12:21 來源:億速云 閱讀:516 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”吧!


Go語音通過首字符的大小寫來限制變量、函數(shù)的包外可見性。最近遇到個問題,需要訪問一個官方包的未導(dǎo)出變量,發(fā)現(xiàn)可以通過反射獲取,于是記錄下來:

首選我們建個新的包user/user.go

package user

type User struct {
    id   int
    Name string
}

func NewUser() User {
    return User{2, "gojuukaze"}
}

然后我們編寫main.go,通過reflect.ValueOf輸出user

func main(){
    user:= user.NewUser()
    fmt.Println(user.Name)
    fmt.Println(reflect.ValueOf(user))
}

程序的輸出為:

gojuukaze
{2 gojuukaze}

可以看到reflect.ValueOf其實是能獲取未導(dǎo)出的變量的。

reflect.ValueOf返回的是結(jié)構(gòu)體Value,接下來我們查看Value方法,可以看到一個FieldByName函數(shù),從名字不難看出,它是通過字段名獲取字段。


接下來嘗試通過FieldByName獲取變量。需要注意的是FieldByName返回的是Value類型,你可能需要經(jīng)過類型裝換后才能使用。

func main(){
    user:= user.NewUser()
    v:=reflect.ValueOf(user)
    fmt.Println(v.FieldByName("id"))
    fmt.Println(v.FieldByName("id").Int())
}

程序輸出為:

2
2

到此,相信大家對“Go獲取結(jié)構(gòu)體未導(dǎo)出私有變量”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

go
AI