Go 언어에서는 덕 타이핑을 채택하고 실제 유형에 따라 값 유형을 결정하기 때문에 함수 오버로딩이 지원되지 않습니다. 다형성은 인터페이스 유형과 메소드 호출을 통해 달성되며, 다양한 범주의 객체는 동일한 방식으로 응답할 수 있습니다. 구체적으로, 인터페이스를 정의하고 이러한 메소드를 구현함으로써 Go 언어는 서로 다른 유형의 객체가 유사한 동작을 갖도록 하여 다형성을 지원할 수 있습니다.
함수 오버로딩
함수 오버로딩은 동일한 범위에서 이름은 같지만 매개변수 유형이 다른 여러 함수를 정의하는 것을 말합니다. Go 언어는 함수 오버로딩을 지원하지 않습니다. 그 이유는 Go 언어가 선언된 유형이 아닌 실제 유형을 기반으로 값의 유형을 결정하는 덕 타이핑을 사용하기 때문입니다. 따라서 두 함수의 이름은 같지만 매개변수 유형이 다른 경우 Go 컴파일러는 이를 여전히 다른 함수로 처리합니다.
다형성
다형성은 상속 메소드나 인터페이스를 호출하여 서로 다른 카테고리의 객체가 동일한 방식으로 응답할 수 있도록 하는 개념입니다. Go 언어는 인터페이스 유형을 사용하여 다형성을 지원합니다. 인터페이스는 일련의 메소드를 정의하며, 이러한 메소드를 구현하는 한 모든 유형이 인터페이스를 구현할 수 있습니다.
실용 사례
다음과 같은 Shape 인터페이스가 있다고 가정합니다:
type Shape interface { Area() float64 }
우리는 이 인터페이스를 구현하는 두 가지 유형을 정의합니다:
Rectangle.go
type Rectangle struct { Length, Width float64 } func (r Rectangle) Area() float64 { return r.Length * r.Width }
Circle.go
type Circle struct { Radius float64 } func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius }
그런 다음 다음을 수행할 수 있습니다. 특정 유형을 알지 못한 채 다양한 도형의 면적을 계산하는 함수를 사용하세요:
ShapeUtil.go
func CalculateArea(shape Shape) float64 { return shape.Area() }
main.go
func main() { rect := Rectangle{Length: 5.0, Width: 3.0} circle := Circle{Radius: 4.0} fmt.Println("Rectangle area:", CalculateArea(rect)) fmt.Println("Circle area:", CalculateArea(circle)) }
주 함수에서는 특정 도형 유형에 관계없이, CalculateArea 함수를 사용하여 면적을 계산할 수 있습니다.
위 내용은 golang 함수 오버로딩과 다형성의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!