Werden Karten in Go als Wert oder Referenz übergeben?
Es ist immer möglich, eine Funktion wie folgt zu definieren, aber ist dies ein Overkill?
func foo(dat *map[string]interface{}) {...}
Gleiche Frage für Rückgabewert. Soll ich einen Zeiger auf die Karte zurückgeben oder die Karte als Wert zurückgeben?
Es ist natürlich beabsichtigt, unnötige Datenkopien zu vermeiden.
*map
In einigen Fällen möchten Sie möglicherweise eine , wenn Sie den Kartenwert an einer Adresse neuAntworten:
In diesem Thread finden Sie Ihre Antwort:
Golang: Zugriff auf eine Karte mithilfe ihrer Referenz
quelle
Hier sind einige Teile von Wenn eine Karte keine Referenzvariable ist, welche ist es? von Dave Cheney:
und Fazit:
Und ein interessantes Stück über die Geschichte / Erklärung der
map
Syntax:quelle
Standardmäßig werden keine Karten referenziert.
package main import "fmt" func mapToAnotherFunction(m map[string]int) { m["hello"] = 3 m["world"] = 4 m["new_word"] = 5 } // func mapToAnotherFunctionAsRef(m *map[string]int) { // m["hello"] = 30 // m["world"] = 40 // m["2ndFunction"] = 5 // } func main() { m := make(map[string]int) m["hello"] = 1 m["world"] = 2 // Initial State for key, val := range m { fmt.Println(key, "=>", val) } fmt.Println("-----------------------") mapToAnotherFunction(m) // After Passing to the function as a pointer for key, val := range m { fmt.Println(key, "=>", val) } // Try Un Commenting This Line fmt.Println("-----------------------") // mapToAnotherFunctionAsRef(&m) // // After Passing to the function as a pointer // for key, val := range m { // fmt.Println(key, "=>", val) // } // Outputs // hello => 1 // world => 2 // ----------------------- // hello => 3 // world => 4 // new_word => 5 // ----------------------- }
Vom Golang Blog-
Code Snippet Link Spielen Sie damit.
quelle