Go 언어에는 전통적인 객체 지향 언어에서 정의된 "클래스"가 없으므로 소위 "상속"도 없습니다. 그러나 Go 언어는 Embedding이라는 구성을 통해 유사한 상속을 달성하는 방법을 제공합니다.
임베딩을 사용하면 유형을 다른 유형에 포함할 수 있으므로 포함된 유형은 인터페이스나 다른 수단을 통해 액세스할 필요 없이 포함된 유형의 속성 및 메서드에 직접 액세스할 수 있습니다. 이 프로세스는 기존의 "상속"과 유사하지만 더 유연합니다.
아래에서는 몇 가지 예를 사용하여 상속과 유사한 기능을 달성하기 위해 임베딩을 사용하는 방법을 보여줍니다.
먼저 개, 고양이, 사람 등 몇 가지 기본 구조를 정의합니다.
type Dog struct { name string } func (d Dog) Bark() { fmt.Println(d.name, ": 汪汪汪!") } type Cat struct { name string } func (c Cat) Mew() { fmt.Println(c.name, ": 喵喵喵!") } type Person struct { name string } func (p Person) Speak() { fmt.Println(p.name, ": 你好!") }
이제 개와 고양이를 "상속"할 수 있고 자체 속성과 색상 및 실행 속도와 같은 방법. 다음과 같이 정의할 수 있습니다.
type Animal struct { Dog Cat color string runSpeed int } func (a Animal) Run() { fmt.Println(a.color, "的动物以", a.runSpeed, "km/h的速度奔跑!") }
이 정의에서 Animal 유형에는 Dog 및 Cat 유형이 포함됩니다. 즉, Animal 유형으로 인스턴스화된 개체는 Dog 및 Cat 유형의 속성과 메서드에 직접 액세스할 수 있습니다. 또한 color 및 runSpeed와 같은 Animal 유형에 대한 자체 속성과 메서드를 정의하여 동물의 색상과 달리기 속도를 나타내고, Run 메서드를 정의하여 동물의 달리기 동작을 설명할 수 있습니다.
이제 Animal 개체를 만들고 어떻게 작동하는지 살펴보겠습니다.
func main() { d := Dog{name: "小黑"} c := Cat{name: "小白"} a := Animal{d, c, "黑白相间", 50} a.Bark() // 小黑 : 汪汪汪! a.Mew() // 小白 : 喵喵喵! a.Run() // 黑白相间 的动物以 50 km/h的速度奔跑! }
Dog 및 Cat 유형을 포함하면 Animal 개체가 인터페이스나 다른 수단을 사용하지 않고 Bark 및 Mew 메서드를 직접 호출할 수 있음을 알 수 있습니다. 이 접근 방식을 사용하면 전통적인 의미의 "상속"을 사용하지 않고도 유사한 기능을 달성할 수 있습니다.
사용자 정의 유형을 다른 사용자 정의 유형에 포함하여 상속과 유사한 효과를 얻을 수 있습니다. 이제 Person 유형과 Student 유형을 정의하고 Person 유형을 Student 유형에 포함해 보겠습니다.
type Person struct { name string age int sex string } type Student struct { Person class string score float64 }
이 정의에서 Student 유형은 Person 유형을 포함합니다. Student 유형 개체를 인스턴스화할 때 Person의 속성과 메서드를 사용할 수 있습니다. 예를 들어, 학생 개체를 인스턴스화하고 이름, 나이, 성별, 학급 및 성적을 설정할 수 있습니다.
func main() { s := Student{ Person: Person{ name: "小明", age: 18, sex: "男", }, class: "高三一班", score: 92.5, } fmt.Println("姓名:", s.name) fmt.Println("年龄:", s.age) fmt.Println("性别:", s.sex) fmt.Println("班级:", s.class) fmt.Println("成绩:", s.score) }
이 프로그램을 실행하면 다음과 같은 출력을 볼 수 있습니다.
姓名: 小明 年龄: 18 性别: 男 班级: 高三一班 成绩: 92.5
학생 개체가 다음을 수행할 수 있음을 알 수 있습니다. 이름, 나이, 성별 등의 속성을 포함하여 Person 유형 객체의 속성과 메서드에 직접 액세스합니다.
한 유형 내에 여러 유형을 중첩하는 것도 가능합니다. 더 많은 기능을 달성하기 위해 Animal 유형을 다른 유형에 포함할 수 있습니다. 예를 들어 이제 Zoo 유형을 정의해 보겠습니다.
type Zoo struct { Animal name string address string } func (z Zoo) ShowInfo() { fmt.Println("这是", z.name, ", 地址是", z.address) z.Run() }
이 유형의 정의에서는 Animal 유형을 Zoo 유형에 포함합니다. 이러한 방식으로 Zoo 유형은 Run 메서드를 포함하여 Animal 유형의 속성과 메서드에 직접 액세스할 수 있습니다. 동물원의 이름과 주소를 출력하는 또 다른 ShowInfo 메서드를 정의하고, 동물이 달리는 모습을 표시하기 위해 Animal 유형의 Run 메서드를 호출합니다.
이제 Zoo 개체를 생성하고 해당 메서드를 테스트합니다.
func main() { d := Dog{name: "小黑"} c := Cat{name: "小白"} a := Animal{d, c, "黑白相间", 50} z := Zoo{a, "北京动物园", "北京市海淀区清华科技园路"} z.ShowInfo() }
이 프로그램을 실행하면 다음과 같은 출력을 볼 수 있습니다.
这是 北京动物园 , 地址是 北京市海淀区清华科技园路 黑白相间 的动物以 50 km/h的速度奔跑!
Animal 유형을 Zoo 유형에 중첩하면 다음을 수행할 수 있습니다. 동물원의 정보와 동물의 달리는 행동을 표시할 수 있는 더 많은 기능을 갖춘 유형을 만듭니다.
요약
Go 언어에는 전통적인 객체지향 언어에서 정의한 클래스와 상속 개념이 없지만, 임베딩 개념을 사용하면 전통적인 상속 방식을 사용하지 않고도 유사한 기능을 구현할 수 있어 더욱 유연하고 편리해졌습니다. 위의 예를 통해 임베딩을 사용하면 하위 유형을 포함하는 유형을 쉽게 만들고 해당 메서드와 속성을 편리하게 호출할 수 있음을 알 수 있습니다.
위 내용은 golang에서 상속하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!