方法的參數名稱鑑於以下轉到方法:獲得在Golang
func (t *T) TMethod(data *testData) (interface{}, *error) {
...
}
我想反映的參數的名稱(這是data
這裏)。
我嘗試以下,但它返回結構名(這是testData
這裏):
reflect.ValueOf(T).MethodByName("TMethod").Type().In(0).Elem().Name()
我怎樣才能獲得參數的名稱?
方法的參數名稱鑑於以下轉到方法:獲得在Golang
func (t *T) TMethod(data *testData) (interface{}, *error) {
...
}
我想反映的參數的名稱(這是data
這裏)。
我嘗試以下,但它返回結構名(這是testData
這裏):
reflect.ValueOf(T).MethodByName("TMethod").Type().In(0).Elem().Name()
我怎樣才能獲得參數的名稱?
無法獲取方法或函數的參數名稱。
原因是因爲名稱對於調用方法或函數的人來說並不重要。重要的是參數的類型和順序。
A Function type表示具有相同參數和結果類型的所有函數的集合。無論參數的名稱如何,具有相同參數和結果類型的2個函數的類型都是相同的。下面的代碼打印true
:
func f1(a int) {}
func f2(b int) {}
fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2))
甚至可以創建一個函數或方法,你甚至不給參數給出名字(參數或結果的列表中,名單,必須悉數到場或全部不存在)。這是有效的代碼:
func NamelessParams(int, string) {
fmt.Println("NamelessParams called")
}
如果你想創建某種框架,你打電話值傳遞函數來「命名」參數(例如映射進來的API PARAMS到去功能/法PARAMS),你可以使用struct
,因爲使用reflect
包可以獲得命名字段(例如Value.FieldByName()
和Type.FieldByName()
),或者您可以使用map
。看到這個相關的問題:Initialize function fields
這是一個關於golang-nuts mailing list的相關討論。
您沒有嘗試該代碼,因爲它沒有編譯。 – rightfold
@ rightfold:我試了一下,只是增加了更多的細節。 – Mohsen