Heim > Backend-Entwicklung > Golang > So erzielen Sie mit der Einbettung in Go einen ähnlichen Effekt wie bei der Vererbung

So erzielen Sie mit der Einbettung in Go einen ähnlichen Effekt wie bei der Vererbung

PHPz
Freigeben: 2023-04-06 09:36:30
Original
724 Leute haben es durchsucht

In Go gibt es keine „Vererbung“ im herkömmlichen Sinne. Allerdings verfügt Go über einen ähnlichen Mechanismus wie die Vererbung – die Einbettung. Durch die Einbettung kann ein Typ die Eigenschaften und Methoden eines anderen Typs in seine eigene Definition aufnehmen, um dasselbe Verhalten und dieselben Eigenschaften zu erhalten. In diesem Artikel besprechen wir, wie man mit der Einbettung in Go etwas Ähnliches wie die Vererbung erreichen kann.

Die Syntax eingebetteter Typen lautet wie folgt:

type MyType struct {
    OtherType
    // MyType 的其他字段
}
Nach dem Login kopieren

Der OtherType hier ist ein bereits definierter Typ. Wir können über OtherType auf die Eigenschaften und Methoden zugreifen, die es definiert. OtherType 是一个已经定义的类型。我们可以通过 OtherType 来访问它定义的属性和方法。

让我们看一个简单的例子。假设我们有一个 Person 类型:

type Person struct {
    Name string
    Age int
}

// 定义一个方法
func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s, and I'm %d years old.\n", p.Name, p.Age)
}
Nach dem Login kopieren

现在,我们想定义一个 Student 类型,它需要拥有 Person 的所有属性和方法,并且还需要拥有自己的特定属性和方法。我们可以使用嵌入来实现这个目标:

type Student struct {
    Person  // 嵌入 Person 类型
    School  string
}

// 定义一个方法
func (s *Student) Study() {
    fmt.Printf("%s is studying at %s.\n", s.Name, s.School)
}
Nach dem Login kopieren

现在,我们可以创建 Student 实例并调用它的方法:

s := &Student{Person{Name: "John", Age: 20}, "MIT"}
s.SayHello()  // 输出:Hello, my name is John, and I'm 20 years old.
s.Study()     // 输出:John is studying at MIT.
Nach dem Login kopieren

在上面的例子中,我们嵌入了 Person 类型,并将它命名为 s.Person。这意味着我们可以像访问 Person 类型的属性和方法一样访问 Student 的属性和方法。例如,我们可以调用 s.Name 获取学生的名字,同时也可以调用 s.Person.Name 获取学生所对应的 Person

Schauen wir uns ein einfaches Beispiel an. Angenommen, wir haben einen Typ Person:

rrreee

Jetzt möchten wir einen Typ Student definieren, der alle Eigenschaften und Methoden von Person haben muss. code>Und muss auch über eigene spezifische Eigenschaften und Methoden verfügen. Wir können dies durch Einbetten erreichen: <p>rrreee</p> Jetzt können wir eine <code>Student-Instanz erstellen und ihre Methoden aufrufen:

rrreee

Im obigen Beispiel betten wir Person-Code> ein Geben Sie es ein und nennen Sie es s.Person. Das bedeutet, dass wir auf die Eigenschaften und Methoden von Student genauso zugreifen können wie auf die Eigenschaften und Methoden des Typs Person . Beispielsweise können wir s.Name aufrufen, um den Namen des Schülers abzurufen, und wir können auch s.Person.Name aufrufen, um die Person abzurufen Instanz, die dem Studentennamen entspricht. 🎜🎜Obwohl die Einbettung einen ähnlichen Mechanismus wie die Vererbung bietet, ist sie nicht genau derselbe. Eingebettete Typen in Go werden nicht Teil der Unterklasse, sondern Teil ihrer Eigenschaften. Dies bedeutet, dass ein Untertyp die Methoden eines eingebetteten Typs nicht überschreiben kann, da der eingebettete Typ weder ein Untertyp noch ein Schnittstellentyp ist. Wenn ein Untertyp das Verhalten des eingebetteten Typs ändern muss, kann er dies tun, indem er dem Untertyp Methoden hinzufügt. 🎜🎜In der Praxis verwenden wir häufig eingebettete Typen, um eine Duplizierung des Codes zu vermeiden. Mithilfe der Einbettung können wir von mehreren Typen gemeinsam genutzten Code in einen einzigen Typ extrahieren und diesen Typ in andere Typen einbetten, um Codeduplizierung und -komplexität zu reduzieren. Dies trägt nicht nur dazu bei, die Wartbarkeit des Codes zu verbessern, sondern hilft uns auch, bei der Implementierung bestimmter Funktionen mehr auf Details zu achten. 🎜🎜In diesem Artikel haben wir den Einbettungsmechanismus in Go vorgestellt und gezeigt, wie man damit ein vererbungsähnliches Verhalten erreicht. Obwohl der Einbettungsmechanismus seine eigenen Einschränkungen hat, ist er ein leistungsstarkes Tool, das uns dabei helfen kann, Codeduplizierungen zu minimieren und die Wartbarkeit bei der Entwicklung großer Projekte zu verbessern. 🎜

Das obige ist der detaillierte Inhalt vonSo erzielen Sie mit der Einbettung in Go einen ähnlichen Effekt wie bei der Vererbung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage