"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que não posso declarar variáveis ​​dentro de instruções condicionais no Go?

Por que não posso declarar variáveis ​​dentro de instruções condicionais no Go?

Publicado em 2024-11-09
Navegar:529

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

Erro: declarações de variáveis ​​dentro de declarações condicionais

Ao encontrar Go pela primeira vez, você pode encontrar confusão em relação à declaração de variáveis ​​dentro de declarações condicionais (por exemplo, se -outro). Esse problema surge quando variáveis ​​(por exemplo, req, er) são declaradas e atribuídas dentro do bloco condicional.

Escopo da variável: entendendo o nível do bloco

No Go, as variáveis ​​são definidos dentro de um escopo específico, que é limitado ao bloco em que são declarados. Considere o seguinte exemplo:

package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
    {
        // New scope
        a := 2
        fmt.Println(a)
    }
    fmt.Println(a) // Prints 1
}

A saída demonstra que reatribuir o valor de a dentro do escopo aninhado não afeta seu valor fora desse escopo. Isso ocorre porque a é declarado localmente dentro do escopo interno, criando uma nova instância da variável, semelhante a:

var a int = 1
var b int = 2
fmt.Println(a)
fmt.Println(b)

Aplicando o conceito a declarações condicionais

Ao tentar declarar variáveis ​​em declarações condicionais:

if condition {
    var req *http.Request
    var er error
}

Você encontrará um erro informando "req declarado e não usado" ou "er declarado e não usado" porque as variáveis ​​só são visíveis dentro do bloco da instrução condicional.

Solução: declarar variáveis ​​fora dos blocos condicionais

Para resolver esse problema, as variáveis ​​devem ser declaradas fora do bloco condicional:

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

Ao fazer isso, as variáveis ​​ficam disponíveis em toda a função, garantindo que sejam inicializadas corretamente. Lembre-se de que o escopo da variável é crucial no Go para manter a clareza do código e evitar comportamentos inesperados.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3