Heim >Backend-Entwicklung >Golang >Wie Golang Methoden für Strukturtypen definiert

Wie Golang Methoden für Strukturtypen definiert

PHPz
PHPzOriginal
2023-04-05 09:09:45848Durchsuche

In der Go-Sprache ist eine Struktur ein benutzerdefinierter Datentyp, der aus einer Reihe von Mitgliedsfeldern verschiedener Typen besteht. Methoden können definiert werden, um Operationen an der Struktur durchzuführen. Die Methoden- und Funktionstypen in der Go-Sprache sind sehr ähnlich, die Methoden und Funktionen sind jedoch unterschiedlich. Methoden sind in einem Strukturtyp definierte Funktionen. In diesem Artikel erklären wir, wie man Methoden für Strukturtypen definiert.

1. Was ist die Golang-Methode?

In der Go-Sprache ist eine Methode eine Funktion, die mit Daten dieses Typs arbeitet. Eine Methode hat Zugriff auf alle öffentlichen Felder und Methoden des Typs, an den sie gebunden ist. Ihre Syntax ähnelt der von Funktionen. Der einzige Unterschied besteht darin, dass in ihren Signaturen dem Methodennamen ein Empfänger vorangestellt ist, der der Strukturtyp ist, zu dem diese Methode gehört.

Zum Beispiel:

type Rectangle struct {
    width, height int
}

func (r Rectangle) area() int {
    return r.width * r.height
}

Hier wird ein Strukturtyp „Rechteck“ und eine Methode „Fläche“ dafür definiert. Diese Methode gibt einen ganzzahligen Wert zurück, indem sie die Fläche des Rechtecks ​​berechnet. Beachten Sie das „(r Rechteck)“ in der Funktionssignatur. Dies ist ein Empfänger, der den Aufruf dieser Methode für den Typ „Rectangle“ ermöglicht.

Im Code zur Implementierung der Methode müssen wir einen Empfänger definieren. Der Empfänger kann ein Werttyp oder ein Zeigertyp sein. Empfänger vom Werttyp verwenden eine Kopie des Werts als Empfänger der Methode, und Empfänger vom Typ Zeiger verwenden einen Zeiger auf den Wert als Empfänger der Methode. Bei Zeigertypempfängern kann die Methode den Wert selbst ändern oder andere Methoden aufrufen, um ihn zu ändern. Bei Werttypempfängern werden diese Änderungen ignoriert.

2. Wie definiere ich Methoden für Typen?

Das Folgende ist ein Beispielprogramm, das zeigt, wie Methoden für einen Strukturtyp definiert werden.

package main

import "fmt"

type Rectangle struct {
    width, height int
}

func (r Rectangle) area() int {
    return r.width * r.height
}

func (r Rectangle) perimeter() int {
    return 2 * (r.width + r.height)
}

func main() {
    r := Rectangle{10, 5}
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter: ", r.perimeter())
}

In diesem Programm definieren wir einen Strukturtyp namens „Rechteck“. Wir definieren zwei Methoden für diesen Typ: „Fläche“ und „Umfang“.

Die Methode „area“ gibt die Fläche des Rechtecks ​​​​zurück und die Methode „perimeter“ gibt den Umfang des Rechtecks ​​​​zurück.

In der Funktion „main“ erstellen wir eine Instanz vom Typ Rechteck mit dem Namen „r“. Wir erhalten die Fläche und den Umfang des Rechtecks, indem wir die Methoden „r.area()“ und „r.perimeter()“ aufrufen und die Werte auf der Konsole ausgeben.

3. Zeigertypempfänger in Typen verwenden

Angenommen, wir möchten die Eigenschaften des Rechtecktyps ändern. Wir müssen im Empfänger Zeigertypen verwenden, keine Werttypen. Auf diese Weise können wir die Felder in der Instanz ändern.

type Rectangle struct {
    width, height int
}

func (r *Rectangle) area() int {
    return r.width * r.height
}

func (r *Rectangle) perimeter() int {
    return 2 * (r.width + r.height)
}

func (r *Rectangle) resize(newWidth int, newHeight int) {
    r.width = newWidth
    r.height = newHeight
}

func main() {
    r := &Rectangle{10, 5}
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter: ", r.perimeter())
    r.resize(12, 6)
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter: ", r.perimeter())
}

Im obigen Code haben wir als Empfänger den Zeigertyp „*Rectangle“. Das bedeutet, dass wir den Wert des Typs in der Methodenimplementierung ändern können. Wir definieren eine neue Methode „resize“, um die Werte der neuen Breite und Höhe zu übergeben und sie den Breiten- und Höheneigenschaften des Rechtecks ​​zuzuweisen.

In der Hauptfunktion erstellen wir einen Zeiger auf die Rechteckinstanz „r“. Anschließend rufen wir die zuvor definierte Methode auf und übergeben die neuen Höhen- und Breitenwerte an die Methode „resize“. Zum Schluss geben wir die neue Fläche und den neuen Umfang des Rechtecks ​​auf der Konsole aus.

4. Zusammenfassung

In der Go-Sprache sind Methoden Funktionen, die in Strukturtypen definiert sind. Diese Methoden haben Zugriff auf alle öffentlichen Felder und Methoden des Typs, an den sie gebunden sind. Im Code zur Implementierung der Methode müssen wir einen Empfänger definieren. Der Empfänger kann ein Werttyp oder ein Zeigertyp sein. Empfänger vom Werttyp verwenden eine Kopie des Werts als Empfänger der Methode, und Empfänger vom Typ Zeiger verwenden einen Zeiger auf den Wert als Empfänger der Methode. Bei Zeigertypempfängern kann die Methode den Wert selbst ändern oder andere Methoden aufrufen, um ihn zu ändern. Bei Werttypempfängern werden diese Änderungen ignoriert.

Das obige ist der detaillierte Inhalt vonWie Golang Methoden für Strukturtypen definiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Kann Golang verwendet werden?Nächster Artikel:Kann Golang verwendet werden?