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