首頁 >後端開發 >Golang >為什麼我無法從 Go 的 `reflect.TypeOf` 取得參數名稱?

為什麼我無法從 Go 的 `reflect.TypeOf` 取得參數名稱?

Barbara Streisand
Barbara Streisand原創
2024-12-21 18:22:11203瀏覽

Why Can't I Get Parameter Names from Go's `reflect.TypeOf`?

反思 Go 中的參數名稱

人們經常希望確定 Go 方法的參數名稱。然而,在嘗試透過 TMethod 函數取得此資訊後,使用者發現僅傳回結構名稱(在本例中為 testData)。

了解參數名稱的缺失

在 Go 中,方法或函數參數的名稱不會明確儲存在執行時間資訊中。這是因為參數名稱對於方法或函數的呼叫者來說並不重要。重點是參數類型及其順序。

具有相同參數和結果類型的兩個函數具有相同的類型,無論其參數名稱為何。例如:

func f1(a int) {}
func f2(b int) {}

fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2)) // Prints true

參數命名的替代方法

如果所需的功能是建立一個框架來呼叫具有「命名」參數的函數,則存在替代參數的函數,則存在替代方法:

  • 使用結構:可以使用反射的Value.FieldByName() 和 Type.FieldByName() 方法取得命名欄位。
  • 使用映射:參數值可以對應到各自的名稱。

進一步見解

了解更多詳細資訊資訊和範例,請參考以下資源:

  • [Go 中是否存在未命名參數? ](https://stackoverflow.com/questions/72503238/is-unnamed-arguments-a- thing-in-go)
  • [初始化函數fields](https://stackoverflow.com/questions/ 47924187/initialize-function-fields)
  • [golang-nuts郵件清單的相關討論](https://groups.google.com/g/ golang-nuts/c/wlyXOha-asQ)

以上是為什麼我無法從 Go 的 `reflect.TypeOf` 取得參數名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn