在Go 程式中,結構體無法實現介面的原因是參數不匹配結構體中的方法參數類型和介面。
對於實作介面的結構,其方法必須與介面中定義的方法簽章精確匹配。這不僅包括方法名稱和傳回類型,還包括參數類型。
在提供的程式碼中,D 結構的 Connect 方法採用 (*C) 參數而不是 (A) 參數,如下所示它所要實現的 B 介面所需要的。這種不匹配會導致錯誤。
要解決此問題,必須修改 Connect 方法以匹配介面的簽章:
package main import "fmt" type A interface { Close() } type B interface { Connect() (A, error) } type C struct { } func (c *C) Close() { fmt.Println("Closing C") } type D struct { } func (d *D) Connect() (A, error) { c := new(C) return c, nil } func test(b B) { c, _ := b.Connect() fmt.Println("Creating A from B") c.Close() } func main() { d := new(D) test(d) }
透過此更正,D 結構現在實現了 B介面:
func (d *D) Connect() (A, error) { c := new(C) return c, nil }
以上是為什麼我的 Go struct 沒有實作介面:方法參數不符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!