>백엔드 개발 >Golang >My Go 구조체가 인터페이스를 구현하지 않는 이유: 일치하지 않는 메서드 매개변수?

My Go 구조체가 인터페이스를 구현하지 않는 이유: 일치하지 않는 메서드 매개변수?

Barbara Streisand
Barbara Streisand원래의
2024-12-04 12:28:11541검색

Why Doesn't My Go Struct Implement the Interface: Mismatched Method Parameters?

메소드 매개변수가 일치하지 않아 인터페이스 구현 방해

문제:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.