在條件語句內宣告的變數
您遇到了一個問題,即條件語句(if...else)中宣告的變數沒有被執行認可。這是因為 Go 中的變數具有特定的作用域,該作用域由聲明它們的區塊定義。
變數作用域
在您的範例中,您聲明req 和 er 在條件語句的分支內。然而,這意味著這些變數僅在那些特定分支中可見。 Go 要求您在打算使用變數的範圍內宣告變數。
解決方案
要解決此問題,請在條件語句之外聲明req 和er,以便它們在整個函數中都是可見的:
var req *http.Request var er error if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") { req, er = http.NewRequest(r.Method, r.Uri, b) } else { req, er = http.NewRequest(r.Method, r.Uri, b) } if er != nil { // we couldn't parse the URL. return nil, &Error{Err: er} } // add headers to the request req.Host = r.Host req.Header.Add("User-Agent", r.UserAgent) req.Header.Add("Content-Type", r.ContentType) req.Header.Add("Accept", r.Accept) if r.headers != nil { for _, header := range r.headers { req.Header.Add(header.name, header.value) } }
理解文法
Go 中= 和:= 之間的差異很重要。 = 用於為現有變數賦值,而 := 用於在同一行中宣告和賦值變數。
這表示如果您使用 = 宣告變量,則必須已經聲明過它在同一作用域或父作用域中,而 := 在單一語句中宣告並初始化變數。
在這種情況下,因為您想在函數內引入新變量,所以 :=是要使用的適當語法。
以上是為什麼我無法存取 Go 中條件語句內宣告的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!