Rumah >pembangunan bahagian belakang >Golang >Mengapa Saya Mendapat Ralat 'Pembolehubah Tidak Diisytiharkan' dalam Penyata Bersyarat Go?
Ralat Pengisytiharan Pembolehubah dalam Pernyataan Bersyarat: Menyelesaikan Isu "Pembolehubah Tidak Diisytiharkan"
Dalam Go, pembolehubah mesti diisytiharkan sebelum ia boleh digunakan. Peraturan ini berlaku walaupun dalam pernyataan bersyarat seperti if...else. Mengisytiharkan pembolehubah di dalam blok bersyarat boleh menyebabkan ralat, seperti yang anda alami.
Memahami Skop Pembolehubah dalam Go
Pembolehubah dalam Go mempunyai skop terhad, bermakna ia hanya boleh diakses dalam blok di mana ia diisytiharkan. Contohnya:
package main import "fmt" func main() { a := 1 fmt.Println(a) { a := 2 fmt.Println(a) } fmt.Println(a) }
Dalam kod ini, pembolehubah a diisytiharkan dua kali, sekali di luar blok dalam dan sekali di dalamnya. Pengisytiharan dalaman mencipta skop yang berasingan dan nilai dalam blok tidak kelihatan kepada skop luar.
Mengisytiharkan Pembolehubah Di Luar Pernyataan Bersyarat
Untuk menyelesaikan masalah ralat yang anda hadapi, anda perlu mengisytiharkan pembolehubah req dan er di luar pernyataan if...else. Ini membolehkan pembolehubah ini boleh diakses di seluruh blok:
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) } }
Dalam kod yang dikemas kini ini, req dan er diisytiharkan di luar pernyataan bersyarat, menjadikannya boleh diakses dalam kedua-dua cawangan if dan else. Ini menyelesaikan ralat kompilasi yang anda hadapi.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Pembolehubah Tidak Diisytiharkan' dalam Penyata Bersyarat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!