這個問題在這里已經有了答案: Go - 地圖值不更新 (1 個答案) 訪問映射值內的結構欄位(不復制) 2 個答案 如何在 Go 中更新地圖值 2 個答案 Golang 更新物件中的映射和變數 1 個答案 如何更新地圖中的結構屬性 [重復] 1 個答案 2天前關閉。
我正在嘗試在結構中附加一個切片,但它根本不會更新。我知道 go 主要是按值傳遞,但切片不是已經指向底層陣列嗎?
我什至嘗試通過我的更改函式(使用指標?)傳遞值,但我仍然得到相同的結果。
package main
import "fmt"
type BookingInfoNode struct {
Car string
Date string
BookingTime int
}
type user struct {
Username string
UserBookings []*BookingInfoNode
}
var mapUsers = make(map[string]user)
func init() {
mapUsers["john"] = user{"john", []*BookingInfoNode{}}
}
func change(a []*BookingInfoNode, booking *BookingInfoNode) []*BookingInfoNode {
a = append(a, booking)
return a
}
func main() {
newBooking := &BookingInfoNode{"mazda", "03/06/2022", 0600}
myUser := mapUsers["john"]
myUser.UserBookings = change(myUser.UserBookings, newBooking)
fmt.Println(myUser.UserBookings)
fmt.Println(mapUsers["john"].UserBookings)
}
有了我的兩個 println,我期待:
[memory address]
[memory address]
但我得到:
[memory address]
[]
uj5u.com熱心網友回復:
您的附加呼叫正在作業。不過,您忘記使用附加值更新地圖。
該映射map[string]user
具有user
struct 作為其值,因此將映射中myUser:=mapUsers["john"]
的副本分配給. 您繼續追加到切片中,但地圖中的副本永遠不會更新。user
myUser
myUser
將映射更改為map[string]*user
,或在更改后將值寫回映射:mapUsers["john"]=myUser
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470449.html