Heim > Artikel > Backend-Entwicklung > Was ist zu beachten, wenn Golang-Funktionen Kartenparameter empfangen?
Beim Übergeben einer Karte an eine Funktion in Go wird standardmäßig eine Kopie erstellt und Änderungen an der Kopie haben keinen Einfluss auf die Originalkarte. Wenn Sie die Originalkarte ändern müssen, können Sie sie über einen Zeiger übergeben. Leere Karten müssen mit Vorsicht behandelt werden, da es sich technisch gesehen um Nullzeiger handelt und die Übergabe einer leeren Karte an eine Funktion, die eine nicht leere Karte erwartet, einen Fehler verursacht.
Dinge, die zu beachten sind, wenn die Go-Funktion Kartenparameter empfängt
Bei der Übergabe der Karte an die Funktion als Parameter in Go gibt es einige Vorsichtsmaßnahmen, wenn sie nicht beachtet werden, kann dies zu unerwarteten Ergebnissen führen.
Übergabe von Kopien
Bei der Übergabe einer Karte an eine Funktion wird standardmäßig eine Kopie erstellt. Mit anderen Worten: Die Zuordnung innerhalb der Funktion ist eine Kopie der Parameterzuordnung, und etwaige Änderungen an der Kopie wirken sich nicht auf die Originalzuordnung aus.
Praktischer Fall 1:
func modifyMap(m map[string]int) { m["key"] = 100 } func main() { m := make(map[string]int) modifyMap(m) fmt.Println(m) // 输出:{} }
Wie im Beispiel gezeigt, haben die von der Funktion modifyMap
an der Karte vorgenommenen Änderungen keinen Einfluss auf die Originalkarte. modifyMap
函数对 map 做出的修改不会影响原始 map。
避免副本传递
如果需要修改原始 map,可以使用指针来传递。当传递指针时,函数内的 map 指向原始 map 的内存地址。
实战案例 2:
func modifyMap(m *map[string]int) { (*m)["key"] = 100 } func main() { m := make(map[string]int) modifyMap(&m) fmt.Println(m) // 输出:{key: 100} }
如示例所示,modifyMap
Vermeiden Sie die Übergabe von Kopien
Wenn Sie die Originalkarte ändern müssen, können Sie sie mit einem Zeiger übergeben. Wenn ein Zeiger übergeben wird, zeigt die Karte innerhalb der Funktion auf die Speicheradresse der ursprünglichen Karte.Praktischer Fall 2:
func printMap(m map[string]int) { for k, v := range m { fmt.Println(k, v) } } func main() { var m map[string]int // 空 map printMap(m) // 运行时错误:panic: runtime error: invalid memory address or nil pointer dereference }Wie im Beispiel gezeigt, wirken sich die durch die Funktion
modifyMap
an der Karte vorgenommenen Änderungen auf die Originalkarte aus.
Leere Karte
Seien Sie vorsichtig, wenn Sie einer Funktion eine leere Karte übergeben. Eine leere Karte ist technisch gesehen ein Nullzeiger und keine gültige Karte. Wenn eine Funktion daher eine nicht leere Karte erwartet, kann es bei der Übergabe einer leeren Karte zu einem Fehler kommen.Das obige ist der detaillierte Inhalt vonWas ist zu beachten, wenn Golang-Funktionen Kartenparameter empfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!