Warum braucht Golang also Hinweise? Welche einzigartigen Verwendungszwecke kann diese Art von Zeiger haben? (Empfohlenes Lernen: GO )
Beim Erlernen der Typsprache immer zuerst herausfinden, wann eine Funktion/Methode übergeben wird Ist es ein Wert oder eine Referenz? Tatsächlich handelt es sich bei den meisten Referenzsprachen, wenn die Parameter vom Basistyp sind, bei den meisten übergebenen Werten um Werte, was bedeutet, dass eine weitere Kopie der Parameter in den aktuellen Funktionsaufrufstapel kopiert wird. Wenn es sich bei den Parametern um erweiterte Typen handelt, sind grundsätzlich alle übergebenen Parameter Referenzen. Dies wird hauptsächlich durch die Speicherverwaltung der virtuellen Maschine verursacht. Der Speicherbereich in der Speicherverwaltung umfasst im Allgemeinen Heap und Stack. Der Stapel wird hauptsächlich zum Speichern einfacher Typdaten verwendet, die im aktuellen Aufrufstapel verwendet werden: Zeichenfolge, Boolescher Wert, Int, Float usw. Diese Speichertypen belegen nur wenig und sind leicht zu recyceln. Im Grunde ähneln ihre Werte dem von Zeigern belegten Platz, sodass sie direkt kopiert werden können, was für GC einfacher ist um gezielte Optimierungen durchzuführen.Komplexe erweiterte Typen belegen in der Regel relativ viel Speicher und werden im Heap gespeichert. Die Häufigkeit des GC-Recyclings ist relativ gering und die Kosten sind hoch. Daher können durch die Übergabe von Referenzen/Zeigern kostspielige Vorgänge vermieden werden . Kopieren Sie Vorgänge, sparen Sie Speicher und verbessern Sie die Effizienz der Programmausführung.
Daher können Sie die Verwendung von Zeigern in folgenden Situationen in Betracht ziehen: 1. Der Wert eines Parameters muss geändert werden. 2. Vermeiden Sie Kopiervorgänge. In Golang unterscheiden sich insbesondere auch erweiterte Typen wie Struktur, Slice und Karte. Tatsächlich ist nur die Verwendung von Struktur etwas kompliziert. Sie können alle direkt verwendet werden, ohne zu berücksichtigen, ob es sich um Werte oder Zeiger handelt.Go hat Zeiger, aber keine Zeigerarithmetik. Sie können keine Zeigervariablen verwenden, um die Bytes einer Zeichenfolge zu durchlaufen. Denken Sie beim Aufrufen von Funktionen in Go daran, dass Variablen als Wert übergeben werden.
Definiert einen Zeiger „*“, indem ihm der Typ „var p * int“ vorangestellt wird. Nun ist p ein Zeiger auf einen ganzzahligen Wert. Allen neu definierten Variablen wird der Nullwert ihres Typs zugewiesen, dasselbe gilt für Zeiger. Ein neu definierter Zeiger oder Zeiger, der auf nichts zeigt, hat den Wert Null. In anderen Sprachen wird dies oft als NULL-Zeiger bezeichnet, in Go ist es nil . Um den Zeiger auf etwas zeigen zu lassen, können Sie den Adressoperator (&) wie folgt verwenden:package main import "fmt" func main() { var p *int fmt.Printf("%v\n",p) //← 打印 nil var i int //← 定义一个整形变量 i p = &i //← 使得 p 指向 i, 获取 i 的地址 fmt.Printf("%v\n",p) //打印内存地址 *p = 6 fmt.Printf("%v\n",*p) //打印6 fmt.Printf("%v\n",i) //打印6 }
Das obige ist der detaillierte Inhalt vonWarum hat GOLANG immer noch Hinweise?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!