泛型中的型別安全注意事項
在 Go 的泛型中,型別參數 T 與約束介面 FooBar 不同。然而,這種區別提出了一個問題:如何將 T 的實例傳遞給需要實現 stringer 的類型的函數(就像這樣做一樣)?
理解錯誤
錯誤訊息「不能使用*T 類型的變數作為要執行的參數中的類型字串」表示blah 的參數t 被錯誤地識別為實現的類型縱梁。然而,T 本身並不具備這種方法。
解決問題
要實現t 到stringer 的轉換,需要執行以下步驟:
最終程式碼
說明
現在,當類型的變數被呼叫時,T t被宣告為指標。 FooBar[T] 將 U 約束為包含指向 T 的指標的型別。將 &t 轉換為 U 是有效的,並且 FooBar[T] (包括 stringer)的方法可供接收者 t 使用。
注意:
使用 FooBar 的類型參數允許傳遞參數並消除中間的需要詭計。例如,您可以將 blah 修改為:
並用 blah(&foo{}) 呼叫它。
以上是如何解決 Go 泛型中的「無法使用 *T 類型的變數作為 stringer 類型」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!