Go Language Tutorial에서 인터페이스 작동 방식 을 설명 합니다.
바둑에는 수업이 없습니다. 그러나 구조체 유형에 대한 메서드를 정의 할 수 있습니다. 방법 수신기는 FUNC 키워드와 메소드 이름과 자신의 인수 목록에 나타납니다.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
인터페이스 유형은 일련의 메소드로 정의됩니다. 인터페이스 유형의 값은 해당 메소드를 구현하는 모든 값을 보유 할 수 있습니다.
Go에서 인터페이스를 만드는 유일한 방법입니다. 구글은 다음과 같이 설명한다 :
유형은 메소드를 구현하여 인터페이스를 구현합니다. 의도에 대한 명시적인 선언은 없습니다 (예 :
interface
선언).암시 적 인터페이스는 인터페이스를 정의하는 패키지에서 구현 패키지를 분리합니다. 둘 다 다른 것에 의존하지 않습니다.
또한 모든 구현을 찾아서 새 인터페이스 이름으로 태그를 지정할 필요가 없기 때문에 정확한 인터페이스의 정의를 권장합니다.
Go의 메소드가 무자비한 다형성이라는 점을 제외하면 C #의 확장 메소드 와 비슷하게 들립니다 . 그것들 을 구현하는 모든 유형에서 작동 합니다.
구글은 이것이 빠른 개발을 장려한다고 주장하지만 왜 그런가? C #의 명시 적 인터페이스에서 벗어나 무언가를 포기합니까? C #의 확장 메서드를 사용하면 Go 인터페이스가 C #의 이점을 얻을 수 있습니까?