Heim  >  Artikel  >  Backend-Entwicklung  >  So ändern Sie einen Wert in Golang

So ändern Sie einen Wert in Golang

PHPz
PHPzOriginal
2023-04-13 18:31:44998Durchsuche

Golang ist eine sehr beliebte Programmiersprache. Aufgrund seiner einfachen Syntax, hohen Leistung und Parallelitätsfunktionen wird es häufig in Webanwendungen, Netzwerkprogrammierung und anderen Bereichen eingesetzt. In Go ist das Ändern des Werts einer Variablen möglicherweise nicht leicht zu verstehen. In diesem Artikel wird ausführlich beschrieben, wie ein Wert in Go geändert wird.

1. Übergabe als Wert und als Referenz

In Golang können Funktionsparameter als Wert oder als Referenz übergeben werden. Die Übergabe als Wert bedeutet, dass eine Kopie des Parameterwerts an die Funktion gesendet wird. Änderungen am Parameterwert innerhalb der Funktion haben keinen Einfluss auf den Wert außerhalb der Funktion. Unter Referenzübergabe versteht man die Übergabe von Parametern als Zeiger auf Funktionen. Änderungen an den Zeigern innerhalb der Funktion werden außerhalb der Funktion widergespiegelt.

Der Beispielcode lautet wie folgt:

package main

import "fmt"

func main() {
    var x int = 10
    fmt.Println("before call:", x)
    modifyValue(x)
    fmt.Println("after call:", x)
    modifyPointer(&x)
    fmt.Println("after call:", x)
}

func modifyValue(x int) {
    x = x + 1
    fmt.Println("in func:", x)
}

func modifyPointer(x *int) {
    *x = *x + 1
    fmt.Println("in func:", *x)
}

Dieser Code definiert zwei Funktionen modifyValue und modifyPointer, eine zum Ändern des Werts und eine zum Ändern des Zeigers. In der Funktion main definieren wir eine Ganzzahlvariable x, initialisieren sie auf 10 und rufen dann modifyValue und modifyPointerauf bzw. >. modifyValuemodifyPointer,一个用于修改值,一个用于修改指针。在 main 函数中,我们定义一个整型变量 x 并初始化为 10,然后分别调用 modifyValuemodifyPointer

当我们执行此程序,输出结果如下:

before call: 10
in func: 11
after call: 10
in func: 11
after call: 11

观察输出可以发现,当调用 modifyValue 时,虽然函数内修改了参数的值,但是函数外的值并没有改变;当调用 modifyPointer 时,函数内将指针指向的值加了一,函数外的值也相应变成了 11。这就是值传递和引用传递的区别。

2. 如何在 Golang 中修改值

了解了值传递和引用传递的区别,我们就可以开始介绍如何在 Golang 中修改值了。

2.1 数组和切片

在 Golang 中,可以通过索引来访问数组和切片中的元素,并且可以通过索引来修改元素的值。

示例代码如下:

package main

import "fmt"

func main() {
    var arr [3]int = [3]int{1, 2, 3}
    fmt.Println("before modify:", arr)
    arr[1] = 4
    fmt.Println("after modify:", arr)
    
    var slc []int = []int {1, 2, 3}
    fmt.Println("before modify:", slc)
    slc[1] = 4
    fmt.Println("after modify:", slc)
}

这段代码定义了一个长度为 3 的整型数组 arr 和一个整型切片 slc,然后依次对数组和切片中的第二个元素进行修改。

当我们执行此程序,输出结果如下:

before modify: [1 2 3]
after modify: [1 4 3]
before modify: [1 2 3]
after modify: [1 4 3]

2.2 Map

在 Golang 中,Map 是一种键值对结构,可以通过键名对 Map 中的值进行访问和修改。

示例代码如下:

package main

import "fmt"

func main() {
    var m map[string]int = map[string]int{"apple": 1, "banana": 2, "orange": 3}
    fmt.Println("before modify:", m)
    m["banana"] = 4
    fmt.Println("after modify:", m)
}

这段代码定义了一个字符串到整型的 Map,然后通过键名修改 Map 中的值。

当我们执行此程序,输出结果如下:

before modify: map[apple:1 banana:2 orange:3]
after modify: map[apple:1 banana:4 orange:3]

2.3 Struct

在 Golang 中,结构体是一种用户自定义的复合类型,可以定义结构体成员并通过点语法来访问和修改结构体成员的值。

示例代码如下:

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func main() {
    var p Person = Person{"Tom", 20}
    fmt.Println("before modify:", p)
    p.Age = 21
    fmt.Println("after modify:", p)
}

这段代码定义了一个名为 Person 的结构体类型,其中包含一个字符串类型的成员 Name 和一个整型类型的成员 Age,然后定义了一个名为 p

Wenn wir dieses Programm ausführen, ist das Ausgabeergebnis wie folgt:

before modify: {Tom 20}
after modify: {Tom 21}
Wenn wir die Ausgabe beobachten, können wir feststellen, dass beim Aufruf von modifyValue, obwohl der Wert des Parameters innerhalb der Funktion geändert wird, Der Wert außerhalb der Funktion ändert sich nicht. Wenn modifyPointer aufgerufen wird, wird der Wert, auf den der Zeiger zeigt, innerhalb der Funktion um eins erhöht, und der Wert außerhalb der Funktion wird entsprechend ebenfalls 11. Dies ist der Unterschied zwischen der Wertübergabe und der Referenzübergabe.

2. So ändern Sie Werte in Golang

Wenn wir den Unterschied zwischen Wertübergabe und Referenzübergabe verstehen, können wir mit der Einführung beginnen, wie Werte in Golang geändert werden. 🎜

2.1 Arrays und Slices

🎜In Golang kann über Indizes auf Elemente in Arrays und Slices zugegriffen werden, und die Werte von Elementen können über Indizes geändert werden. 🎜🎜Der Beispielcode lautet wie folgt: 🎜rrreee🎜Dieser Code definiert ein ganzzahliges Array arr mit einer Länge von 3 und ein ganzzahliges Slice slc und sortiert dann das Array und Slice in Sequence Ändern Sie das zweite Element in . 🎜🎜Wenn wir dieses Programm ausführen, lautet die Ausgabe wie folgt: 🎜rrreee

2.2 Map

🎜In Golang ist Map eine Schlüssel-Wert-Paarstruktur, und auf die Werte in der Map kann zugegriffen werden durch Schlüsselnamen geändert. 🎜🎜Der Beispielcode lautet wie folgt: 🎜rrreee🎜Dieser Code definiert eine Map von einer Zeichenfolge zu einer Ganzzahl und ändert dann den Wert in der Map über den Schlüsselnamen. 🎜🎜Wenn wir dieses Programm ausführen, lautet die Ausgabe wie folgt: 🎜rrreee

2.3 Struct

🎜In Golang ist die Struktur ein benutzerdefinierter zusammengesetzter Typ und die Strukturmitglieder können durch Punktsyntax definiert werden. Greifen Sie auf die Werte von Strukturmitgliedern zu und ändern Sie sie. 🎜🎜Der Beispielcode lautet wie folgt: 🎜rrreee🎜Dieser Code definiert einen Strukturtyp namens Person, der ein String-Typ-Mitglied Name und ein ganzzahliges Typ-Mitglied enthält Age, definiert dann eine Strukturvariable mit dem Namen p, weist einen Anfangswert zu und ändert schließlich den Wert des Strukturmitglieds. 🎜🎜Wenn wir dieses Programm ausführen, lautet die Ausgabe wie folgt: 🎜rrreee🎜3. Variablen in Golang können in Grundtypen und zusammengesetzte Typen unterteilt werden. Grundtypen können nicht direkt geändert werden, während Werte zusammengesetzter Typen über Indizes, Schlüsselnamen und Punktsyntax geändert werden können. In Golang kann die Parameterübergabe auf zwei Arten erfolgen: Wertübergabe und Referenzübergabe. Sie müssen basierend auf den tatsächlichen Anforderungen entscheiden, welche Methode verwendet werden soll. Bei der Wertübertragung kann der Wert außerhalb der Funktion nicht direkt geändert werden und muss durch Übergabe eines Zeigers erreicht werden. 🎜

Das obige ist der detaillierte Inhalt vonSo ändern Sie einen Wert in Golang. 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