Testar condições com expressões if/else

Concluído

O fluxo de controle mais básico em qualquer linguagem de programação é a instrução if/else. No Go, as instruções if/else são simples. Mas você precisa entender algumas diferenças antes de começar a se sentir à vontade para escrever programas com o Go.

Vamos dar uma olhada na sintaxe Go para instruções if.

Sintaxe para instruções if

Ao contrário de outras linguagens de programação, no Go, não é preciso usar parênteses em condições. A cláusula else é opcional. Porém as chaves “{ }” ainda são necessárias. Além disso, o Go não oferece suporte para instruções if ternárias para redução de linhas; portanto, é preciso escrever a instrução if completa toda vez.

Veja um exemplo básico de uma instrução if:

package main

import "fmt"

func main() {
    x := 27
    if x%2 == 0 {
        fmt.Println(x, "is even")
    }
}

No Visual Studio Code, se a sintaxe Go incluir parênteses em condições, estes serão removidos automaticamente quando você salvar o programa.

Instruções if compostas

O Go oferece suporte a instruções if compostas. É possível aninhar instruções usando a instrução else if. Aqui está um exemplo:

package main

import "fmt"

func givemeanumber() int {
    return -1
}

func main() {
    if num := givemeanumber(); num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has only one digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
}

Nesse código, observe que a variável num armazena o valor retornado da função givemeanumber() e que a variável está disponível em todas as ramificaçõesif. No entanto, se você tentar imprimir o valor da variável num fora do bloco if, receberá um erro como o seguinte:

package main

import "fmt"

func somenumber() int {
    return -7
}
func main() {
    if num := somenumber(); num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has 1 digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }

    fmt.Println(num)
}

Ao executar o programa, a saída de erro terá a seguinte aparência:

# command-line-arguments
./main.go:17:14: undefined: num

No Go, declarar variáveis em blocos if é idiomático. É uma maneira de programar com eficiência usando uma convenção comum no Go.