Rumah >pembangunan bahagian belakang >Golang >Mengapa Saya Mendapat Ralat 'Pembolehubah Tidak Diisytiharkan' dalam Penyata Bersyarat Go?

Mengapa Saya Mendapat Ralat 'Pembolehubah Tidak Diisytiharkan' dalam Penyata Bersyarat Go?

DDD
DDDasal
2024-11-26 11:44:10910semak imbas

Why Am I Getting

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!

Kenyataan:
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