Go에서 구조체는 해당 인터페이스의 모든 메서드를 구현하는 경우 인터페이스를 구현합니다. 그러나 구조체 메소드에 인터페이스를 구현하는 매개변수가 있는 경우 구조체는 인터페이스를 구현하지 않습니다.
package main type A interface { Close() } type B interface { Connect() (A, error) } type C struct { } func (c *C) Close() { } type D struct { } func (d *D) Connect() (*C, error) { c := new(C) return c, nil } func test(b B) { } func main() { d := new(D) test(d) }
위 예에서 구조체 D는 인터페이스 B를 구현하지 않습니다. D에는 인터페이스 A를 구현하는 매개변수가 있습니다. 나타나는 오류 메시지는 다음과 같습니다.
cannot use d (type *D) as type B in argument to test: *D does not implement B (wrong type for Connect method) have Connect() (*C, error) want Connect() (A, error)
이 오류를 해결하려면 Connect에서 매개변수 유형을 변경해야 합니다.
type D struct { } func (d *D) Connect() (A, error) { c := new(C) return c, nil }
이제 구조체 D는 인터페이스 B를 구현하고 D 값을 인수로 사용하여 test() 함수를 호출할 수 있습니다.
위 내용은 메소드 매개변수가 해당 인터페이스를 구현하는 경우 Go 구조체가 인터페이스를 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!