初始化全域錯誤變數時,對於同一套件中的函數來說,它可能看起來沒有變化。這種差異源自於對變數作用域的誤解。
在第一個範例中,您使用:= 在主函數中初始化f 和loadErr:
這一行為f 和loadErr 建立一個新的局部變數。它不會修改函數外部定義的全域變數。因此,當您呼叫 checkErr() 時,loadErr 仍然是 nil,因為它尚未設定在主函數範圍內的任何位置。
在第二個範例中,您使用= 將loadErr 的值設為os.Open() 傳回的錯誤:
透過使用=,您正在明確分配局部err 變數的值到全域loadErr 變數。這允許函數 checkErr() 存取修改後的全域變數並觸發恐慌。
為了防止無意中建立遮蔽全域變數的局部變量,聲明全域變數非常重要在賦值之前明確指定。在第一個範例中,您可以透過移動其定義將 loadErr 宣告為主函數外部的全域變數:
這確保了全域 loadErr 變數在整個程式中可存取和更新。
以上是為什麼我的全域錯誤變數在 Go 中初始化後不會崩潰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!