Ir - Variables

Una variable no es más que un nombre que se le da a un área de almacenamiento que los programas pueden manipular. Cada variable en Go tiene un tipo específico, que determina el tamaño y el diseño de la memoria de la variable, el rango de valores que se pueden almacenar dentro de esa memoria y el conjunto de operaciones que se pueden aplicar a la variable.

El nombre de una variable puede estar compuesto por letras, dígitos y el carácter de subrayado. Debe comenzar con una letra o un guión bajo. Las letras mayúsculas y minúsculas son distintas porque Go distingue entre mayúsculas y minúsculas. Según los tipos básicos explicados en el capítulo anterior, habrá los siguientes tipos de variables básicas:

No Señor Tipo y descripción
1

byte

Normalmente, un solo octeto (un byte). Este es un tipo de byte.

2

int

El tamaño más natural de número entero para la máquina.

3

float32

Un valor de coma flotante de precisión simple.

El lenguaje de programación Go también permite definir otros tipos de variables como Enumeración, Puntero, Matriz, Estructura y Unión, que discutiremos en capítulos posteriores. En este capítulo, nos centraremos solo en los tipos de variables básicas.

Definición de variable en Go

Una definición de variable le dice al compilador dónde y cuánto almacenamiento crear para la variable. Una definición de variable especifica un tipo de datos y contiene una lista de una o más variables de ese tipo de la siguiente manera:

var variable_list optional_data_type;

Aquí, optional_data_type es un tipo de datos Go válido que incluye byte, int, float32, complex64, boolean o cualquier objeto definido por el usuario, etc., y variable_listpuede constar de uno o más nombres de identificadores separados por comas. Aquí se muestran algunas declaraciones válidas:

var  i, j, k int;
var  c, ch byte;
var  f, salary float32;
d =  42;

La declaración “var i, j, k;”declara y define las variables i, j y k; que indica al compilador que cree variables denominadas i, j y k de tipo int.

Las variables se pueden inicializar (asignar un valor inicial) en su declaración. El compilador juzga automáticamente el tipo de variable en función del valor que se le pasa. El inicializador consta de un signo igual seguido de una expresión constante de la siguiente manera:

variable_name = value;

Por ejemplo,

d = 3, f = 5;    // declaration of d and f. Here d and f are int

Para la definición sin un inicializador: las variables con duración de almacenamiento estático se inicializan implícitamente con nil (todos los bytes tienen el valor 0); el valor inicial de todas las demás variables es el valor cero de su tipo de datos.

Declaración de tipo estático en Go

Una declaración de variable de tipo estático proporciona seguridad al compilador de que hay una variable disponible con el tipo y el nombre dados para que el compilador pueda proceder a una compilación posterior sin requerir el detalle completo de la variable. Una declaración de variable tiene su significado solo en el momento de la compilación, el compilador necesita la declaración de variable real en el momento de vincular el programa.

Ejemplo

Pruebe el siguiente ejemplo, donde la variable se declaró con un tipo y se inicializó dentro de la función 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)
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

20
x is of type float64

Declaración de tipo dinámico / Inferencia de tipo en Go

Una declaración de variable de tipo dinámico requiere que el compilador interprete el tipo de la variable en función del valor que se le pasa. El compilador no requiere que una variable tenga un tipo estáticamente como requisito necesario.

Ejemplo

Pruebe el siguiente ejemplo, donde las variables se han declarado sin ningún tipo. Observe, en caso de inferencia de tipos, inicializamos la variabley con: = operador, mientras que x se inicializa con el 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)	
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

20
42
x is of type float64
y is of type int

Declaración de variable mixta en Go

Las variables de diferentes tipos se pueden declarar de una vez mediante la inferencia de tipos.

Ejemplo

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

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

3
4
foo
a is of type int
b is of type int
c is of type string

Los valores l y r en Go

Hay dos tipos de expresiones en Go:

  • lvalue- Las expresiones que se refieren a una ubicación de memoria se denominan expresión "lvalue". Un lvalue puede aparecer como el lado izquierdo o derecho de una tarea.

  • rvalue- El término rvalue se refiere a un valor de datos que se almacena en alguna dirección de la memoria. Un rvalue es una expresión a la que no se le puede asignar un valor, lo que significa que un rvalue puede aparecer en el lado derecho pero no en el izquierdo de una asignación.

Las variables son valores l y, por lo tanto, pueden aparecer en el lado izquierdo de una tarea. Los literales numéricos son valores r y, por lo tanto, no pueden asignarse y no pueden aparecer en el lado izquierdo.

La siguiente declaración es válida:

x = 20.0

La siguiente declaración no es válida. Generaría un error en tiempo de compilación -

10 = 20