Golang踩坑 判斷map中是否有key

2021-09-25 23:52:28 字數 913 閱讀 1608

最近在實習,下班回去十點多了,再加上比較懶,快有兩個月沒寫東西了。今天在開發乙個模組的時候是接著上乙個人的寫的,好不容易各種配置寫好了開始跑,發現他踩了乙個很容易踩的坑。

把bug抽出來單獨寫了個檔案。

package main

import (

"log"

)type agent struct

var m map[int]*agent

func main()

log.println(a)

var ok bool

if a, ok = m[1]; ok

m[1] = a

log.println(a)

log.println(a.str)

}

執行一下

可以看到報了無效指標的問題(invalid memory address or nil pointer dereference)。從上面的兩個log可以看到,最開始指標是有值的,第二個卻沒了,原因就出現在那個if判斷那裡。

if判斷是想通過檢視map知道agent是否已經存在,這個地方的錯誤是a,ok = map; 我們想通過ok判斷是否存在,但是在這裡還有個a,這會導致有乙個對a賦值的操作,也就是說如果map裡有這個值,那沒事,如果沒有的話a就被賦值成了nil了。在下面列印的時候也就成了nil,取它的屬性的時候會告訴我們找了個空指標的屬性,這肯定找不到。

我們把a換成_,再來看結果:

ok了。

記錄每天解決的小問題,積累起來去解決大問題。

Golang學習踩坑

學習一門新語言,難免少不了踩坑,很多坑都是因為上個語言遺留下來的習慣,在這裡記錄一下 jetbrains goland 編寫go語言的時候,不能直接寫import,一般寫main 的時候會自動匯入 go語言申明的變數必須使用,不然會編譯報錯 go語言一行一句,不支援分行,不需要 如果你想把多行語句並...

Golang開發踩過的坑

如何判斷某type型別實現了某介面 作為golang開發的小白,日常開發時候總會遇到一些問題,本篇部落格的會收錄一些日常開發時踩過的坑,可能有解決了的,也許也會有沒解決的。在使用for range進行遍歷切片或陣列時,遍歷時的指標index,value只是乙個臨時且位址不變的記憶體位址 packag...

Golang 踩坑(無法分類情況

1.for迴圈使用多個變數 for expression1 expression2 expression3 錯誤寫法 是語句而不是表示式 不能使用i j 正解為 i i 1,j j 1 func main fmt.println sum is equal to sum 正確寫法 func main ...