在Go 程式中,全域初始化錯誤變數會帶來一個特殊問題,即它在同一包中的其他功能。為了解開這個謎團,讓我們深入研究一個具體的例子:
package main<p>import (</p><pre class="brush:php;toolbar:false">"os" "fmt"
)
var loadErr錯誤
func main() {
f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) }
}
//不會呼叫panic,因為loadErr為nil
func checkErr() {
if loadErr != nil { panic(loadErr) }
}
}
f, loadErr := os.Open("asdasd")本質上建構了一個名為loadErr 的局部變數,不同來自全域聲明的變數。不幸的是,全域變數不受影響,導致 nil 值難題。 要解決此問題,必須將 := 運算子替換為標準賦值運算子 =。這確保了全域變數 loadErr 被引用並使用 os.Open() 傳回的值進行初始化:
func main() {<pre class="brush:php;toolbar:false">_, loadErr = os.Open("asdasd")> ;透過進行這個細微的更改,可以正確設定全域錯誤變量,並且恐慌函數現在的行為如下此外,如果您需要os.Open() 的兩個回傳值,則必須事先明確宣告賦值中使用的第二個變數:
var f *os .File<br>f, loadErr = os.Open("asdasd")
以上是為什麼Go中全域錯誤變數初始化失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!