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) } }
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!