簡體   English   中英

如何在 Go 中獲取結構體的方法列表?

[英]How to get a list of a struct's methods in Go?

我有一個庫,其中有ClientMockClient結構,它們都實現了相同的ClientInterface接口。 我想編寫單元測試以保持這些結構同步,以便它們不僅實現接口,而且使MockClient具有Client的所有方法。 為此,如果MockClient缺少Client的方法之一,我想獲取結構方法的列表,以便打印信息性錯誤消息。

我試過改編How to get the name of a function in Go? 到這個簡化的例子:

package main

import (
    "fmt"
    "reflect"
    "runtime"
)

type Person struct {
    Name string
}

func (person *Person) GetName() string {
    return person.Name
}

func main() {
    person := Person{Name: "John Doe"}
    personValue := reflect.ValueOf(&person)

    for i := 0; i < personValue.NumMethod(); i++ {
        fmt.Println(runtime.FuncForPC(personValue.Method(i).Pointer()).Name())
    }
}

我想要的是這個腳本(在https://play.golang.org/p/HwvhEPfWI5I共享)打印GetName 然而,相反,它打印

reflect.methodValueCall

我怎樣才能讓這個腳本打印*Person的方法的名稱?

使用類型獲取方法名稱:

t := reflect.TypeOf(&person)
for i := 0; i < t.NumMethod(); i++ {
    m := t.Method(i)
    fmt.Println(m.Name)
}

在操場上運行它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM