Go 프로그램에서 구조가 인터페이스를 구현할 수 없는 것은 메소드 매개변수의 불일치로 인해 발생합니다. 구조의 메소드 매개변수 유형과 인터페이스.
구조가 인터페이스를 구현하려면 해당 메서드가 인터페이스에 정의된 메서드 서명과 정확하게 일치해야 합니다. 여기에는 메소드 이름과 반환 유형뿐 아니라 매개변수 유형도 포함됩니다.
제공된 코드에서 D 구조의 Connect 메소드는 다음과 같이 (A) 매개변수 대신 (*C) 매개변수를 사용합니다. 구현하려는 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 }
위 내용은 My Go 구조체가 인터페이스를 구현하지 않는 이유: 일치하지 않는 메서드 매개변수?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!