在 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中文网其他相关文章!