Mengapa Saya Tidak Boleh Mengakses Pembolehubah yang Diisytiharkan Di Dalam Penyata Bersyarat dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-09 18:19:02
asal
567 orang telah melayarinya

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

Pembolehubah Diisytiharkan Dalam Pernyataan Bersyarat

Anda telah menghadapi isu di mana pembolehubah yang diisytiharkan dalam pernyataan bersyarat (jika...lain) tidak sedang diiktiraf. Ini kerana pembolehubah dalam Go mempunyai skop khusus, yang ditakrifkan oleh blok di mana ia diisytiharkan.

Skop Pembolehubah

Dalam contoh anda, anda mengisytiharkan req dan er dalam cabang pernyataan bersyarat. Walau bagaimanapun, ini bermakna pembolehubah ini hanya boleh dilihat dalam cawangan tertentu tersebut. Go memerlukan anda untuk mengisytiharkan pembolehubah dalam skop di mana ia bertujuan untuk digunakan.

Penyelesaian

Untuk menyelesaikan isu ini, isytiharkan permintaan di luar pernyataan bersyarat supaya bahawa ia boleh dilihat sepanjang fungsi:

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)
    }
}
Salin selepas log masuk

Memahami Sintaks

Perbezaan antara = dan := dalam Go adalah penting. = digunakan untuk memberikan nilai kepada pembolehubah sedia ada, manakala := digunakan untuk mengisytiharkan dan menetapkan pembolehubah dalam baris yang sama.

Ini bermakna jika anda mengisytiharkan pembolehubah dengan =, anda mesti sudah mengisytiharkan ia dalam skop yang sama atau skop induk, manakala := mengisytiharkan dan memulakan pembolehubah dalam satu pernyataan.

Dalam kes ini, kerana anda ingin memperkenalkan pembolehubah baharu dalam fungsi, := ialah sintaks yang sesuai untuk digunakan.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mengakses Pembolehubah yang Diisytiharkan Di Dalam Penyata Bersyarat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan