首頁  >  文章  >  後端開發  >  為什麼我無法存取 Go 中條件語句內宣告的變數?

為什麼我無法存取 Go 中條件語句內宣告的變數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-09 18:19:02595瀏覽

Why Can't I Access Variables Declared Inside Conditional Statements in Go?

在條件語句內宣告的變數

您遇到了一個問題,即條件語句(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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn