go MethodByName()不能獲取私有方法的解決
在使用reflect包獲取函數(shù),并調(diào)用時,總出現(xiàn)這個報錯:
panic: reflect: call of reflect.Value.Call on zero Value
然后測試發(fā)現(xiàn),只有公有函數(shù)(首字母大寫的函數(shù))可以通過reflect.MethodByName()函數(shù)獲取,私有方法是不行的。
測試如下:
定義一個接口obj
objA實現(xiàn)接口。
為objA分配三個方法,兩個公有方法一個私有方法。
使用MethodByName()獲取函數(shù)并調(diào)用。
type obj interface {
Do()
}
type objA struct {
a []int
b []int
c int
}
var N int = 1000
func NewObjA() (o *objA) {
o = &objA{}
rand.Seed(time.Now().UnixNano())
o.a = make([]int, N)
o.b = make([]int, N)
for i := 0; i < N; i++ {
o.a[i] = rand.Intn(256)
o.b[i] = rand.Intn(256)
}
return
}
func (o *objA) Do() {
o.c = 0
for i := range o.a {
o.c += o.a[i] * o.b[i] % 256
}
}
func (o *objA) do() {
o.c = 0
for i := range o.a {
o.c += o.a[i] * o.b[i] % 256
}
}
func (o *objA) Do2() int{
o.c = 0
for i := range o.a {
o.c += o.a[i] * o.b[i] % 256
}
return o.c
}
func main() {
a := obj(NewObjA())
v:=reflect.ValueOf(a)
if f1 := v.MethodByName("Do"); f1.IsValid() {
f1.Call([]reflect.Value{})
fmt.Println("成功執(zhí)行 Do")
}
if f2 := v.MethodByName("do"); f2.IsValid() {
f2.Call([]reflect.Value{})
fmt.Println("成功執(zhí)行 do")
}
if f2 := v.MethodByName("Do2"); f2.IsValid() {
f2.Call([]reflect.Value{})
fmt.Println("成功執(zhí)行 Do2,結(jié)果 ")
}
fmt.Println("方法數(shù)量為:",v.NumMethod())
for i:=0;i< v.NumMethod();i++{
f:=v.Method(i)
fmt.Println("方法",i,":",f.Type())
}
}運行結(jié)果:

發(fā)現(xiàn)只有兩個公有方法能夠執(zhí)行
私有方法是沒有辦法獲取到的
到此這篇關(guān)于go MethodByName()不能獲取私有方法的解決的文章就介紹到這了,更多相關(guān)go MethodByName()不能獲取私有方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GoLang中生成UUID唯一標(biāo)識的實現(xiàn)
這篇文章主要介紹了GoLang中生成UUID唯一標(biāo)識的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能詳解
這篇文章主要介紹了Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能,哈希和加密類似,唯一區(qū)別是哈希是單項的,即哈希后的數(shù)據(jù)無法解密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03
詳解Golang中Context的三個常見應(yīng)用場景
Golang?context主要用于定義超時取消,取消后續(xù)操作,在不同操作中傳遞值。本文通過簡單易懂的示例進行說明,感興趣的可以了解一下2022-12-12
Mac上Go環(huán)境和VS Code的正確安裝與配置方法
Go語言是一個新興的語言。下面介紹一下如何在Mac系統(tǒng)下安裝和使用這個語言,Go語言提供了mac下安裝包,可直接下載安裝包點擊安裝2018-03-03
Go語言基礎(chǔ)switch條件語句基本用法及示例詳解
這篇文章主要為大家介紹了Go語言基礎(chǔ)switch條件語句基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11

