Heim Backend-Entwicklung Golang Referenzdatentypen und Wertdatentypen in der Go-Sprache

Referenzdatentypen und Wertdatentypen in der Go-Sprache

Jun 01, 2023 am 09:12 AM
go语言 引用类型 值类型

Go-Sprache ist eine stark typisierte Sprache, in der Datentypen in zwei Typen unterteilt werden können: Referenzdatentypen und Wertdatentypen. Referenzdatentypen und Wertdatentypen unterscheiden sich geringfügig in der Verwendung. Schauen wir uns diese beiden Datentypen genauer an.

1. Referenzdatentypen

Zu den Referenzdatentypen in der Go-Sprache gehören Slices, Karten, Kanäle, Schnittstellen und Zeiger. Bei Referenzdatentypen ist der Wert einer Variablen nicht nur ihr eigener Wert, sondern ein Zeiger auf eine Speicheradresse. Wenn wir daher eine Variable vom Referenztyp deklarieren, wird ihr eine Speicheradresse zugewiesen und auf dem Stapel gespeichert, und der Speicherplatz, auf den die Speicheradresse zeigt, wird im Heap gespeichert.

  1. Slice

Ein Slice ist ein dynamisches Array, das je nach Bedarf automatisch vergrößert oder verkleinert werden kann. Am Beispiel eines String-Slices lauten die Deklaration und Initialisierung wie folgt:

var s1 []string // Deklariere das Slice
s1 = make([]string, 3) // Initialisieren Sie mit der Make-Funktion Slice
s2 := []string{"foo", "bar", "baz"} // Deklarieren Sie das Slice direkt und initialisieren Sie es

In der Go-Sprache Ein Slice ist ein Zeiger auf die zugrunde liegenden Daten. Der Zeiger enthält sowohl die Länge als auch die Kapazität des Slice. Dies sind die Werte, die von den Funktionen len und cap zurückgegeben werden. Wenn die Anzahl der Elemente in einem Slice die Kapazität überschreitet, weist die Go-Sprache einen größeren Speicherplatz neu zu und kopiert dann die ursprünglichen Elemente in den neuen Speicherplatz.

  1. Mapping

Mapping ist eine ungeordnete Sammlung von Schlüssel-Wert-Paaren, die mithilfe des Schlüsselworts „map“ in der Go-Sprache definiert werden. Am Beispiel einer String-Zuordnung lauten die Deklaration und Initialisierung wie folgt:

m1 := make(map[string]int) // Verwenden Sie die Make-Funktion, um die Zuordnung
m2 zu initialisieren := map[string] int{"foo": 1, "bar": 2, "baz": 3} // Deklarieren Sie das Mapping direkt und initialisieren Sie es

In der Go-Sprache das Mapping ist auch ein Zeiger auf die zugrunde liegenden Daten. Enthält die Anzahl der zugeordneten Elemente. Wenn die Anzahl der Elemente in der Karte die zugrunde liegende Speicherkapazität überschreitet, weist die Go-Sprache einen größeren Speicherplatz neu zu.

  1. Channel

Channel ist eine Möglichkeit, Daten zwischen mehreren Ctrips zu übertragen, indem die make-Funktion verwendet wird und der <-Operator einen Kanal deklariert. Am Beispiel eines String-Kanals lauten die Deklaration und Initialisierung wie folgt:

var ch1 chan string // Deklarieren Sie den Kanal
ch1 = make(chan string) // Verwenden Sie die make-Funktion um den Kanal zu initialisieren #🎜🎜 #ch2 := make(chan string, 3) // Verwenden Sie die Make-Funktion, um den gepufferten Kanal zu initialisieren
ch1 <- "foo" // Daten an den Kanal senden #🎜🎜 #data := <-ch1 // Daten vom Kanal lesen

In der Go-Sprache ist der Kanal auch ein Zeiger auf die zugrunde liegenden Daten, einschließlich der Kapazität des Kanals und der aktuellen Anzahl Elemente. Wenn die Anzahl der Elemente im Kanal die Kapazität überschreitet, blockiert die Go-Sprache den aktuellen Ctrip und wartet darauf, dass andere Ctrips die Elemente wegnehmen.

Schnittstelle
  1. Eine Schnittstelle ist ein Datentyp, der eine Reihe von Schnittstellenmethoden definiert. Am Beispiel einer einfachen Schnittstelle lautet die Deklaration wie folgt:

type Caller interface {

Call() bool

}

In the Go In der Sprache ist die Schnittstelle auch ein Zeiger auf die zugrunde liegenden Daten und zeigt auf die Struktur bei der Implementierung dieser Schnittstelle. Schnittstellen sind schneller als Werttypen, da Schnittstellenmethoden nicht durch Implementierungsvorgänge kopiert werden.

Zeiger
  1. Ein Zeiger ist eine Variable, die eine Speicheradresse enthält, die in der Go-Sprache zum Deklarieren und Verwenden verwendet wird Hinweise. Nehmen Sie als Beispiel einen Zeiger auf eine Variable vom Typ String, deklarieren und verwenden Sie ihn wie folgt:

var p1 *string // Zeiger deklarieren

s1 := "foo"

p1 = &s1 // Den Zeiger auf die Speicheradresse der String-Variablen richten
fmt.Println("s1:", s1, "p1:", *p1) // Den Wert der String-Variablen über den Zeiger abrufen
#🎜 🎜#In der Go-Sprache muss die Variable, auf die der Zeiger zeigt, im Voraus deklariert werden. In der Go-Sprache gibt es keinen ähnlichen Zeigeroperator wie in der C-Sprache.

2. Wertdatentypen

Zu den Wertdatentypen in der Go-Sprache gehören Boolescher Wert, Ganzzahl, Gleitkomma, Komplex, Zeichen, Zeichenfolge und Array. Bei Variablen vom Typ Wert werden der Wert der Variablen und die Variable selbst auf dem Stapel gespeichert.

Boolescher Typ

  1. Der boolesche Typ hat in der Go-Sprache nur zwei Werte: wahr und falsch. Da der boolesche Typ nur ein Byte hat, kann er den Speicherbedarf bei Verwendung in großen Mengen effektiv reduzieren.

Ganzzahltyp

  1. Der Ganzzahltyp der Go-Sprache ist in vorzeichenbehaftete Ganzzahltypen und vorzeichenlose Ganzzahltypen in int8 unterteilt , int16, int32 und int64, vorzeichenlose Ganzzahltypen werden in uint8, uint16, uint32 und uint64 unterteilt. Bei der Verwendung wird empfohlen, so oft wie möglich die Typen int und uint zu verwenden, da die Bytebreite dieser beiden Typen auf verschiedenen Plattformen gleich ist.

Gleitkommatyp

  1. Der Gleitkommatyp der Go-Sprache ist in zwei Typen unterteilt: float32 und float64. Der Standardtyp ist float64. Bei der Verwendung wird empfohlen, wann immer möglich den Typ float64 zu verwenden, da die Berechnungsgeschwindigkeit und -genauigkeit dieses Typs höher ist als die des Typs float32.

Pluraltyp

  1. Der komplexe Zahlentyp verwendet die Typen complex64 und complex128 in der Go-Sprache, um reelle und imaginäre Zahlen darzustellen. Beispielsweise gibt der Typ complex64 an, dass sowohl der Realteil als auch der Imaginärteil komplexe Zahlen vom Typ float32 sind.

Zeichentyp

  1. Der Zeichentyp wird in der Go-Sprache durch Runen dargestellt. Der Bereich der Runentyp- und Int32-Typidentifikation ist derselbe. In der Go-Sprache können Sie einfache Anführungszeichen verwenden, um Zeichen darzustellen.
    1. String

    String ist eine schreibgeschützte Zeichenfolge in der Go-Sprache, und doppelte Anführungszeichen werden verwendet, um Zeichenfolgen in der Go-Sprache darzustellen. Zeichenfolgen in der Go-Sprache sind UTF-8-codiert.

    1. Array

    Array ist ein Datentyp mit fester Länge und demselben Elementtyp in der Go-Sprache. Wenn Sie es verwenden, müssen Sie die Länge und den Elementtyp des Arrays im Voraus deklarieren.

    Fazit

    Referenzdatentypen und Wertdatentypen unterscheiden sich in der Verwendung in der Go-Sprache geringfügig. Durch Vergleich kann festgestellt werden, dass Wertdatentypen im Stapel gespeichert sind Variablen befinden sich im Speicher. Die Position in einer Variablen ändert sich im Laufe der Zeit nicht (wenn keine Zeigeroperationen verwendet werden), während der Wert einer Referenzdatentypvariablen ein Zeiger auf eine im Heap zugewiesene Speicheradresse ist. Bei der tatsächlichen Verwendung sollten Referenzdatentypen und Wertdatentypen rational verwendet werden, um optimale Leistung und Wirkung zu erzielen.

Das obige ist der detaillierte Inhalt vonReferenzdatentypen und Wertdatentypen in der Go-Sprache. 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ß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)

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Apr 02, 2025 pm 05:09 PM

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Apr 02, 2025 pm 04:12 PM

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Apr 02, 2025 pm 12:57 PM

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Apr 02, 2025 pm 12:54 PM

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...

See all articles