Heim Backend-Entwicklung Golang Wie man in Golang erbt

Wie man in Golang erbt

May 22, 2023 pm 03:25 PM

In der Go-Sprache gibt es keine „Klasse“, die in traditionellen objektorientierten Sprachen definiert ist, daher gibt es keine sogenannte „Vererbung“. Die Go-Sprache bietet jedoch eine Methode, um eine ähnliche Vererbung durch Komposition zu erreichen, die als Einbettung bezeichnet wird.

Durch das Einbetten können wir einen Typ in einen anderen Typ einbetten, sodass der eingebettete Typ direkt auf die Eigenschaften und Methoden des Typs zugreifen kann, in den er eingebettet ist, ohne über eine Schnittstelle oder auf andere Weise darauf zugreifen zu müssen . Dieser Prozess ähnelt der traditionellen „Vererbung“, ist jedoch flexibler.

Im Folgenden zeigen wir anhand einiger Beispiele, wie man durch Einbettung vererbungsähnliche Funktionen erreichen kann.

  1. Grundlegendes Beispiel

Wir definieren zunächst ein paar Grundstrukturen, Hunde, Katzen und Menschen:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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, ": 你好!")

}

Nach dem Login kopieren
#🎜🎜 #Jetzt Wir möchten einen Tiertyp schaffen, der Hunde und Katzen „erben“ kann und auch über eigene Eigenschaften und Methoden wie Farbe und Laufgeschwindigkeit verfügt. Wir können es so definieren:

1

2

3

4

5

6

7

8

9

10

type Animal struct {

    Dog

    Cat

    color       string

    runSpeed    int

}

 

func (a Animal) Run() {

    fmt.Println(a.color, "的动物以", a.runSpeed, "km/h的速度奔跑!")

}

Nach dem Login kopieren

In dieser Definition bettet der Typ „Tier“ die Typen „Hund“ und „Katze“ ein. Dies bedeutet, dass vom Typ Animal instanziierte Objekte direkt auf die Eigenschaften und Methoden der Typen Dog und Cat zugreifen können. Wir können auch unsere eigenen Eigenschaften und Methoden für den Tiertyp definieren, z. B. Farbe und runSpeed, um die Farbe und Laufgeschwindigkeit des Tieres darzustellen, und eine Run-Methode definieren, um die Laufaktion des Tieres zu beschreiben.

Jetzt erstellen wir ein Animal-Objekt und sehen, wie es funktioniert:

1

2

3

4

5

6

7

8

func main() {

    d := Dog{name: "小黑"}

    c := Cat{name: "小白"}

    a := Animal{d, c, "黑白相间", 50}

    a.Bark()    // 小黑 : 汪汪汪!

    a.Mew()     // 小白 : 喵喵喵!

    a.Run()     // 黑白相间 的动物以 50 km/h的速度奔跑!

}

Nach dem Login kopieren

Wir können sehen, dass durch die Einbettung der Typen Dog und Cat das Animal-Objekt direkt Bark und aufgerufen werden kann Mew-Methoden ohne Verwendung von Schnittstellen oder anderen Mitteln. Dieser Ansatz ermöglicht es uns, eine ähnliche Funktionalität zu erreichen, ohne „Vererbung“ im herkömmlichen Sinne zu verwenden.

    Eingebetteter benutzerdefinierter Typ
Wir können einen benutzerdefinierten Typ in einen anderen benutzerdefinierten Typ einbetten, um einen ähnlichen Effekt wie bei der Vererbung zu erzielen. Definieren wir nun einen Personentyp und einen Studententyp und betten den Personentyp in den Studententyp ein:

1

2

3

4

5

6

7

8

9

10

11

type Person struct {

    name string

    age  int

    sex  string

}

 

type Student struct {

    Person

    class string

    score float64

}

Nach dem Login kopieren

In dieser Definition bettet der Studententyp den Personentyp ein. Beim Instanziieren eines Objekts vom Typ Student können Sie die Eigenschaften und Methoden von Person verwenden. Beispielsweise können wir ein Schülerobjekt instanziieren und seinen Namen, sein Alter, sein Geschlecht, seine Klasse und seine Noten festlegen:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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)

}

Nach dem Login kopieren

Wenn wir dieses Programm ausführen, können wir die Ausgabe wie folgt sehen:

1

2

3

4

5

姓名: 小明

年龄: 18

性别: 男

班级: 高三一班

成绩: 92.5

Nach dem Login kopieren

Wir können sehen, dass das Student-Objekt direkt auf die Eigenschaften und Methoden des Person-Typ-Objekts zugreifen kann, einschließlich Attributen wie Name, Alter und Geschlecht.

    verschachtelte Einbettung
Es ist auch möglich, mehrere Typen innerhalb eines Typs zu verschachteln. Wir können den Tiertyp in einen anderen Typ einbetten, um mehr Funktionen zu erreichen. Definieren wir jetzt zum Beispiel einen Zoo-Typ:

1

2

3

4

5

6

7

8

9

10

type Zoo struct {

    Animal

    name    string

    address string

}

 

func (z Zoo) ShowInfo() {

    fmt.Println("这是", z.name, ", 地址是", z.address)

    z.Run()

}

Nach dem Login kopieren

In der Definition dieses Typs betten wir den Animal-Typ in den Zoo-Typ ein. Auf diese Weise kann der Zoo-Typ direkt auf die Eigenschaften und Methoden des Animal-Typs zugreifen, einschließlich der Run-Methode. Wir definieren eine weitere ShowInfo-Methode, um den Namen und die Adresse des Zoos auszugeben, und rufen die Run-Methode des Typs Animal auf, um die laufenden Tiere anzuzeigen.

Jetzt erstellen wir ein Zoo-Objekt und testen seine Methoden:

1

2

3

4

5

6

7

func main() {

    d := Dog{name: "小黑"}

    c := Cat{name: "小白"}

    a := Animal{d, c, "黑白相间", 50}

    z := Zoo{a, "北京动物园", "北京市海淀区清华科技园路"}

    z.ShowInfo()

}

Nach dem Login kopieren

Wenn wir dieses Programm ausführen, können wir die Ausgabe wie folgt sehen:

1

2

这是 北京动物园 , 地址是 北京市海淀区清华科技园路

黑白相间 的动物以 50 km/h的速度奔跑!

Nach dem Login kopieren
# 🎜 🎜#Wir können sehen, dass wir durch die Verschachtelung des Animal-Typs in den Zoo-Typ einen Typ mit mehr Funktionen erstellen können, der Zooinformationen und die laufenden Aktionen von Tieren anzeigen kann.

Zusammenfassung

Obwohl es in der Go-Sprache keine durch traditionelle objektorientierte Sprachen definierten Klassen- und Vererbungskonzepte gibt, ermöglicht uns das Konzept der Einbettung, auf die Verwendung traditioneller Methoden zu verzichten Vererbungsmethoden sind bei ähnlichen Funktionen flexibler und bequemer. Anhand der obigen Beispiele können wir sehen, dass die Einbettung es einfach macht, einen Typ zu erstellen, der Untertypen enthält, und deren Methoden und Eigenschaften bequem aufzurufen.

Das obige ist der detaillierte Inhalt vonWie man in Golang erbt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Mar 10, 2025 pm 05:38 PM

Dieser Artikel zeigt, dass Mocks und Stubs in GO für Unit -Tests erstellen. Es betont die Verwendung von Schnittstellen, liefert Beispiele für Mock -Implementierungen und diskutiert Best Practices wie die Fokussierung von Mocks und die Verwendung von Assertion -Bibliotheken. Die Articl

Wie schreibt man Unit -Tests in Go? Wie schreibt man Unit -Tests in Go? Mar 21, 2025 pm 06:34 PM

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Mar 10, 2025 pm 03:20 PM

In diesem Artikel werden die benutzerdefinierten Typ -Einschränkungen von GO für Generika untersucht. Es wird beschrieben, wie Schnittstellen die minimalen Typanforderungen für generische Funktionen definieren und die Sicherheitstypsicherheit und die Wiederverwendbarkeit von Code verbessern. Der Artikel erörtert auch Einschränkungen und Best Practices

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Mar 10, 2025 pm 05:36 PM

In diesem Artikel wird die Verwendung von Tracing -Tools zur Analyse von GO -Anwendungsausführungsfluss untersucht. Es werden manuelle und automatische Instrumentierungstechniken, den Vergleich von Tools wie Jaeger, Zipkin und Opentelemetrie erörtert und die effektive Datenvisualisierung hervorheben

Wie verwenden Sie das PPROF -Tool, um die Go -Leistung zu analysieren? Wie verwenden Sie das PPROF -Tool, um die Go -Leistung zu analysieren? Mar 21, 2025 pm 06:37 PM

In dem Artikel wird erläutert, wie das PPROF -Tool zur Analyse der GO -Leistung verwendet wird, einschließlich der Aktivierung des Profils, des Sammelns von Daten und der Identifizierung gängiger Engpässe wie CPU- und Speicherprobleme.Character Count: 159

Erläutern Sie den Zweck von Go's Reflect Package. Wann würden Sie Reflexion verwenden? Was sind die Leistungsauswirkungen? Erläutern Sie den Zweck von Go's Reflect Package. Wann würden Sie Reflexion verwenden? Was sind die Leistungsauswirkungen? Mar 25, 2025 am 11:17 AM

In dem Artikel wird das Reflect -Paket von Go, das zur Laufzeitmanipulation von Code verwendet wird, von Vorteil für die Serialisierung, generische Programmierung und vieles mehr. Es warnt vor Leistungskosten wie langsamere Ausführung und höherer Speichergebrauch, beraten die vernünftige Verwendung und am besten am besten

Wie verwenden Sie tabelgesteuerte Tests in Go? Wie verwenden Sie tabelgesteuerte Tests in Go? Mar 21, 2025 pm 06:35 PM

In dem Artikel werden mit Tabellensteuerungstests in GO eine Methode mit einer Tabelle mit Testfällen getestet, um Funktionen mit mehreren Eingaben und Ergebnissen zu testen. Es zeigt Vorteile wie eine verbesserte Lesbarkeit, verringerte Vervielfältigung, Skalierbarkeit, Konsistenz und a

Wie verwenden Sie Sync.waitGroup, um auf die Fertigstellung mehrerer Goroutinen zu warten? Wie verwenden Sie Sync.waitGroup, um auf die Fertigstellung mehrerer Goroutinen zu warten? Mar 19, 2025 pm 02:51 PM

In dem Artikel wird erläutert, wie Sync.waitgroup verwendet wird, um gleichzeitige Operationen zu verwalten, die Initialisierung, Verwendung, gemeinsame Fallstricke und Best Practices zu detaillieren.

See all articles