Go - Variáveis
Uma variável nada mais é que um nome dado a uma área de armazenamento que os programas podem manipular. Cada variável em Go tem um tipo específico, que determina o tamanho e o layout da memória da variável, a faixa de valores que podem ser armazenados nessa memória e o conjunto de operações que podem ser aplicadas à variável.
O nome de uma variável pode ser composto de letras, dígitos e o caractere sublinhado. Deve começar com uma letra ou um sublinhado. Letras maiúsculas e minúsculas são diferentes porque Go diferencia maiúsculas de minúsculas. Com base nos tipos básicos explicados no capítulo anterior, haverá os seguintes tipos básicos de variáveis -
Sr. Não | Tipo e descrição |
---|---|
1 | byte Normalmente, um único octeto (um byte). Este é um tipo de byte. |
2 | int O tamanho mais natural do inteiro para a máquina. |
3 | float32 Um valor de ponto flutuante de precisão única. |
A linguagem de programação Go também permite definir vários outros tipos de variáveis, como Enumeration, Pointer, Array, Structure e Union, que discutiremos nos próximos capítulos. Neste capítulo, enfocaremos apenas os tipos básicos de variáveis.
Definição de Variável em Go
Uma definição de variável informa ao compilador onde e quanto armazenamento criar para a variável. Uma definição de variável especifica um tipo de dados e contém uma lista de uma ou mais variáveis desse tipo como segue -
var variable_list optional_data_type;
Aqui, optional_data_type é um tipo de dados Go válido, incluindo byte, int, float32, complex64, booleano ou qualquer objeto definido pelo usuário, etc., e variable_listpode consistir em um ou mais nomes de identificadores separados por vírgulas. Algumas declarações válidas são mostradas aqui -
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
A declaração “var i, j, k;”declara e define as variáveis i, j e k; que instrui o compilador a criar variáveis chamadas i, j e k do tipo int.
As variáveis podem ser inicializadas (atribuídas a um valor inicial) em sua declaração. O tipo de variável é julgado automaticamente pelo compilador com base no valor passado a ela. O inicializador consiste em um sinal de igual seguido por uma expressão constante como segue -
variable_name = value;
Por exemplo,
d = 3, f = 5; // declaration of d and f. Here d and f are int
Para definição sem um inicializador: variáveis com duração de armazenamento estático são inicializadas implicitamente com nil (todos os bytes têm o valor 0); o valor inicial de todas as outras variáveis é o valor zero de seu tipo de dados.
Declaração de tipo estático em Go
Uma declaração de variável de tipo estático fornece garantia ao compilador de que há uma variável disponível com o tipo e nome fornecidos para que o compilador possa prosseguir para a compilação posterior sem exigir os detalhes completos da variável. Uma declaração de variável tem seu significado apenas no momento da compilação, o compilador precisa da declaração da variável real no momento da vinculação do programa.
Exemplo
Tente o exemplo a seguir, onde a variável foi declarada com um tipo e inicializada dentro da função principal -
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T\n", x)
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
20
x is of type float64
Declaração de tipo dinâmico / inferência de tipo em Go
Uma declaração de variável de tipo dinâmico requer que o compilador interprete o tipo da variável com base no valor passado a ela. O compilador não requer que uma variável tenha um tipo estaticamente como um requisito necessário.
Exemplo
Tente o exemplo a seguir, onde as variáveis foram declaradas sem nenhum tipo. Observe, no caso de inferência de tipo, inicializamos a variávely com: = operador, enquanto x é inicializado usando o operador =.
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T\n", x)
fmt.Printf("y is of type %T\n", y)
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
20
42
x is of type float64
y is of type int
Declaração de Variável Mista em Go
Variáveis de diferentes tipos podem ser declaradas de uma vez usando a inferência de tipo.
Exemplo
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T\n", a)
fmt.Printf("b is of type %T\n", b)
fmt.Printf("c is of type %T\n", c)
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
3
4
foo
a is of type int
b is of type int
c is of type string
Os lvalues e os rvalues em Go
Existem dois tipos de expressões em Go -
lvalue- As expressões que se referem a um local da memória são chamadas de expressão "lvalue". Um lvalue pode aparecer como o lado esquerdo ou direito de uma atribuição.
rvalue- O termo rvalue refere-se a um valor de dados que é armazenado em algum endereço da memória. Um rvalue é uma expressão que não pode ter um valor atribuído a ela, o que significa que um rvalue pode aparecer no lado direito, mas não no lado esquerdo de uma atribuição.
As variáveis são lvalues e, portanto, podem aparecer no lado esquerdo de uma atribuição. Literais numéricos são rvalues e, portanto, não podem ser atribuídos e não podem aparecer no lado esquerdo.
A seguinte declaração é válida -
x = 20.0
A seguinte declaração não é válida. Isso geraria um erro em tempo de compilação -
10 = 20