Beispiele für die Übergabe von Go-Werten und Adressen

藏色散人
Freigeben: 2020-10-30 15:00:20
nach vorne
2311 Leute haben es durchsucht

Die Spalte.

Schauen wir uns zunächst ein einfaches Beispiel an

Beispiele für die Übergabe von Go-Werten und Adressen

1. Fügen Sie ein & vor einer Variablen hinzu, um die Adresse dieser Variablen anzugeben (d. h. den Zeiger dieser Variablen). eine Zeigervariable, die den Wert angibt, der diesem Zeiger entspricht (selbstverständlich).

//main.gopackage main
func ByAss() {
  s := 100
  p := &s  // s 的地址给了p

  fmt.Println(*p) //100 所以p对应的值变成了100
  *p += 100
  fmt.Println(*p)  //200
  fmt.Println(s) //200 p和s相同的地址,所以s也变成200}//demo.gopackage main
func main() {
  ByAss()}
Nach dem Login kopieren

Go verwendet standardmäßig die Wertübergabe, um Parameter zu übergeben, d. h. eine Kopie des Parameters. Nachdem die Funktion eine Kopie des Parameters empfangen hat, kann sich der Wert der Kopie während der Verwendung der Variablen ändern, dies hat jedoch keine Auswirkungen auf die ursprüngliche Variable, z. B. Funktion (arg1).

2. Gewöhnliche Wertübergabe (achten Sie auf dieses Beispiel, es sieht sehr einfach aus, ist aber leicht zu ignorieren)

func ByValue1(n1 int) {
  //此时n1 是n 的一个拷贝,所以地址不一样
  fmt.Println(&n1)//0xc00000a098}package main
func main() {
  n := 100
  fmt.Println(&n) //0xc00000a090
  ByValue1(n)//传递副本}
Nach dem Login kopieren

Wenn Sie möchten, dass die Funktion den Wert des Parameters direkt ändert, anstatt eine Kopie zu bearbeiten des Parameters müssen Sie den Parameter übergeben. Die Adresse (mit einem kaufmännischen Und vor dem Variablennamen, z. B. &variable) wird an die Funktion übergeben, die als Referenz übergeben wird, z. B. Function(&arg1) Zu diesem Zeitpunkt , wird ein Zeiger an die Funktion übergeben.

3. Wenn Sie die Adresse übergeben möchten

4. Schauen Sie sich das Array an. (a) Das Array wird auch als Wert übergeben:

func main() {
    n := 100
    fmt.Println(&n) //0xc00000a090
    ByReference(&n) //传递指针
    fmt.Println(n) //200}//注意函数 参数类型需要是用指针符号(*)func ByReference(n1 *int) {

   *n1 += 100
   fmt.Println(n1)//0xc00000a090 地址与n相同, 所以n值被改变了
  //注意
  //ip := &n1//这个写法有问题,表示地址的地址
  //fmt.Println(ip)}
Nach dem Login kopieren
. Das Folgende ist ein Beispiel des Slicings (Variablenarray) Slices werden per Referenz übergeben

arr := [5]int{1,3,5,6,7}arrByValue(&arr) //也需要使用& 符号fmt.Println(arr) //[100 300 5 6 7]func arrByValue(arr1 *[5]int) {
 arr2 := arr1
 arr2[0] = 100
 arr2[1] = 300}
Nach dem Login kopieren

(b) Wenn eine Funktion aufgerufen wird, werden Referenztypen wie Slice, Wörterbuch (Karte), Schnittstelle und Kanal standardmäßig per Referenz übergeben (auch wenn nicht explizit). Zeiger).

Das obige ist der detaillierte Inhalt vonBeispiele für die Übergabe von Go-Werten und Adressen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage