以下代碼旨在允許根據(jù)用戶的團(tuán)隊(duì)更新“shiftlog”變量,并通過后續(xù)調(diào)用讀取內(nèi)容。第一個(gè)請(qǐng)求是“添加”一個(gè)inc,這成功了 - 調(diào)試在shiftLog中顯示inc。下一個(gè)請(qǐng)求是“讀取”shiftLog 的內(nèi)容,但執(zhí)行此操作時(shí),shiftLog 為空。type shiftLog []incvar nOCLog shiftLogvar sUPLog shiftLogvar tECLog shiftLogvar activeLog shiftLogfunc interactionHandler() { switch TeamID { case "NOC": activeLog = nOCLog case "SUP": activeLog = sUPLog case "TEC": activeLog = tECLog } switch Action { case Add: activeLog = addInc(inc, activeLog) log.Debug(activeLog) // activeLog shows added incident case Read: readLog(activeLog) log.Debug(activeLog) // activeLog (And nOC/sUP/tECLog) is empty }}我顯然誤解了go(我是新手),但是什么?“activeLog = addInc(inc, activeLog)”行是我相信的慣用語,似乎確實(shí)更新了正確的變量,并且范圍似乎是正確的。問題是我在第一個(gè) switch 語句中的變量賦值嗎?
1 回答
Smart貓小萌
TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
將項(xiàng)追加到切片時(shí),將返回新切片。新切片被賦值給變量,但這與之前賦給該變量的任何切片無關(guān)。您正在拋棄先前的內(nèi)容并分配新內(nèi)容。activeLog
如果要通過另一個(gè)變量修改變量,則需要指向該變量的指針,而不是對(duì)其內(nèi)容的引用:
nOCLog := []int{1, 2, 3}
// Bad
x := nOCLog
x = append(x, 4)
fmt.Println(x) // 1, 2, 3, 4
fmt.Println(nOCLog) // 1, 2, 3 (no change)
// Good
y := &nOCLog
*y = append(*y, 4)
fmt.Println(*y) // 1, 2, 3, 4
fmt.Println(nOCLog) // 1, 2, 3, 4
查看 https://play.golang.org/p/wwNz4Oh3NjW
- 1 回答
- 0 關(guān)注
- 136 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
