Funktionszeiger in Go

Musfirah Waseem 20 Juni 2023
  1. Deklaration von Zeigern in Go
  2. Initialisieren Sie einen Zeiger in Go
  3. Verwenden Sie den nicht initialisierten Zeiger in Go
  4. Verwenden Sie die Kurzschrift := Syntax für Zeiger in Go
  5. Ändern Sie die Werte einer Variablen mit einem Zeiger in Go
  6. Erstellen Sie Zeiger mit der Funktion new() in Go
  7. Übergeben Sie einen Zeiger als Argument an eine Funktion in Go
  8. Übergeben Sie eine Adresse einer Variablen als Argument an eine Funktion in Go
  9. Gibt einen Zeiger von einer Funktion in Go zurück
Funktionszeiger in Go

Ein Zeiger in der Go-Sprache ist eine Spezialvariable, die verwendet wird, um die Speicheradressen anderer Variablen und Punkte zu speichern, an denen sich der Speicher befindet. Auf den dort gespeicherten Wert kann ebenfalls zugegriffen werden.

Deklaration von Zeigern in Go

var pointer_name *Data_Type

In Funktionszeigern verwendete Operatoren

  1. * - Es ist ein Dereferenzierungsoperator, der eine Zeigervariable deklariert. Auf den Wert, der an der dereferenzierten Adresse gespeichert ist, kann damit zugegriffen werden.
  2. & - Dies ist ein Adressoperator, der verwendet wird, um die Adresse einer Variablen anzugeben.

Initialisieren Sie einen Zeiger in Go

package main

import "fmt"

func main() {

	var myVariable int = 2

	var myPointer *int

	myPointer = &myVariable

	fmt.Println("The value stored in 'myVariable' = ", myVariable)

	fmt.Println("The address of 'myVariable' = ", &myVariable)

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)
}

Ausgang:

The value stored in 'myVariable' =  2
The address of 'myVariable' =  0xc000090020
The value stored in 'myPointer' =  0xc000090020.
The value pointed by 'myPointer' after dereferencing =  2

Beachten Sie, dass der in der Variablen myPointer gespeicherte Wert die Adresse der Variablen myVariable ist.

Verwenden Sie den nicht initialisierten Zeiger in Go

package main

import "fmt"

func main() {

	var myPointer *int

	fmt.Println("The value stored in 'myPointer' = ", myPointer)
}

Ausgang:

The value stored in 'myPointer' =  <nil>

Beachten Sie, dass ein nicht initialisierter Zeiger standardmäßig den Wert nil hat.

Verwenden Sie die Kurzschrift := Syntax für Zeiger in Go

package main

import "fmt"

func main() {

	myVariable := 2

	myPointer := &myVariable

	fmt.Println("The value stored in 'myVariable' = ", myVariable)

	fmt.Println("The address of 'myVariable' = ", &myVariable)

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)
}

Ausgang:

The value stored in 'myVariable' =  2
The address of 'myVariable' =  0xc000090020
The value stored in 'myPointer' =  0xc000090020
The value pointed by 'myPointer' after dereferencing =  2

Beachten Sie, dass Sie, wenn Sie den Datentyp mit der Zeigerdeklaration angegeben haben, den Zeiger nur verwenden können, um die Speicheradresse der angegebenen Datentypvariablen zu verarbeiten.

Der Operator := erkennt automatisch den Datentyp und stellt sicher, dass der erzeugte Zeiger denselben Datentyp verarbeiten kann.

Ändern Sie die Werte einer Variablen mit einem Zeiger in Go

package main

import "fmt"

func main() {

	myVariable := 2

	myPointer := &myVariable

	fmt.Println("The value stored in 'myVariable' = ", myVariable)

	fmt.Println("The address of 'myVariable' = ", &myVariable)

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)

	*myPointer = 5

	fmt.Println("The updated value pointed by 'myPointer' after dereferencing = ", *myPointer)

	fmt.Println("The updated value stored in 'myVariable' = ", myVariable)


}

Ausgang:

The value stored in 'myVariable' =  2
The address of 'myVariable' =  0xc000016058
The value stored in 'myPointer' =  0xc000016058
The value pointed by 'myPointer' after dereferencing =  2
The updated value pointed by 'myPointer' after dereferencing =  5
The updated value stored in 'myVariable' =  5

Beachten Sie, dass Sie den Wert des Zeigers ändern können, anstatt der Variablen einen neuen Wert zuzuweisen. Der mit einem Zeiger geänderte Wert spiegelt sich auch im ursprünglichen Wert wider.

Erstellen Sie Zeiger mit der Funktion new() in Go

package main

import "fmt"

func main() {

	var myPointer = new(int)

	*myPointer = 2

	fmt.Println("The value stored in 'myPointer' = ", myPointer)

	fmt.Println("The value pointed by 'myPointer' after dereferencing = ", *myPointer)

}

Ausgang:

The value stored in 'myPointer' =  0xc000016058
The value pointed by 'myPointer' after dereferencing =  2

Beachten Sie, dass Sie mit der Funktion new() direkt einen Zeiger auf eine Ganzzahl erstellen können.

Übergeben Sie einen Zeiger als Argument an eine Funktion in Go

package main

import "fmt"

func myFunction(myVariable *int) {

	*myVariable = 5
}

func main() {

	var myVariable = 2

	fmt.Printf("The value of myVariable before function call is: %d\n", myVariable)

	var myPointer *int = &myVariable

	myFunction(myPointer)

	fmt.Printf("The value of myVariable after function call is: %d\n", myVariable)

}

Ausgang:

The value of myVariable before function call is: 2
The value of myVariable after function call is: 5

Beachten Sie, dass die oben erstellte Funktion den Wert der Variablen myVariable geändert hat. Der in der Funktion geänderte Wert wird außerhalb der Funktion widergespiegelt, da der Zeiger direkt auf den Speicherort verweist, an dem die Variable gespeichert ist.

Übergeben Sie eine Adresse einer Variablen als Argument an eine Funktion in Go

package main

import "fmt"

func myFunction(myVariable *int) {

	*myVariable = 5
}

func main() {

	var myVariable = 2

	fmt.Printf("The value of myVariable before function call is: %d\n", myVariable)

	myFunction(&myVariable)

	fmt.Printf("The value of myVariable after function call is: %d\n", myVariable)

}

Ausgang:

The value of myVariable before function call is: 2
The value of myVariable after function call is: 5

Beachten Sie, dass die oben erstellte Funktion den Wert der Variablen myVariable geändert hat. Der in der Funktion geänderte Wert wird außerhalb der Funktion widergespiegelt.

Die Änderung erfolgt an dem Speicherplatz, an dem die Variable abgelegt ist. Dies ist eine alternative Methode zum Übergeben eines Zeigers an eine Funktion.

Gibt einen Zeiger von einer Funktion in Go zurück

package main
import "fmt"

func main() {

  displayText := display()

  fmt.Println("Hello,", *displayText)

}

func display() *string {

  myMessage := "World!"

  return &myMessage

}

Ausgang:

Hello, World!

Beachten Sie, dass die oben erstellte Funktion einen Zeiger zurückgibt, der auf die Zeichenfolge myMessage zeigt. Der Wert wird dann in der Funktion main dereferenziert.

Musfirah Waseem avatar Musfirah Waseem avatar

Musfirah is a student of computer science from the best university in Pakistan. She has a knack for programming and everything related. She is a tech geek who loves to help people as much as possible.

LinkedIn