Variables tipadas e inferencia de tipos

En Go, como lenguaje de tipado fuerte, todas las variables tienen que llevar asociado el tipo que indica qué valores se pueden asignar a esa variable. Podemos especificarlo manualmente, o podemos dejar que la inferencia de tipos haga el trabajo por nosotros.

Cuando expliqué cómo declarar variables en Go, lo hice mediante el uso de la palabra clave var. Ya avisé que esta era una de las varias formas que tiene Go de declarar variables.

Cuando yo pongo var saludo = "hola", Go está aplicando un principio conocido como inferencia de tipos. Go analiza la expresión que hay a la derecha del igual, y determina el tipo de datos de lo que hay. Por ejemplo, en este caso, como pone "hola", que es algo escrito entre comillas, llega a la conclusión de que le estoy intentando asignar a la variable saludo un dato de tipo cadena de caracteres. Como resultado de la inferencia de tipos, una vez Go determina el tipo de datos de lo que hay a la derecha del igual, establecerá que el identificador (lo que va a la izquierda) referencia una variable que será de ese mismo tipo.

Esto es porque en Go, como lenguaje fuertemente tipado, todas las variables tienen un tipo. Esto es algo que ya he dicho varias veces pero no las suficientes. Cuando declaro una variable,

var saludo = "Buenos días"

saludo es el identificador de una variable, pero Go necesita darle un tipo, para poder determinar las operaciones que se podrá hacer con esta variable como parte de una expresión, o bien para saber si se puede pasar esa variable como argumento al llamar a otra función.

Mediante la inferencia de tipos, Go determinará que "Buenos días" es una cadena de caracteres y, por lo tanto, que saludo identificará una variable de tipo cadena de caracteres.

Es posible especificar el tipo de una variable declarada con var poniendo una tercera palabra antes del igual, que será el tipo de datos que queremos que tenga esa variable. Por ejemplo, en este caso declararemos la variable despedida como de tipo cadena de caracteres (string).

var despedida string

Por ejemplo, ahora le puedo asignar un valor:

var despedida string = "Hasta luego"

string es el tipo de datos. Existen más. En otro capítulo de este curso os contaba los tipos de datos primitivos de Go, pero es importante saber que cada tipo de datos se escribe en Go con una palabra clave diferente.

  • string: como has visto, las cadenas de caracteres.
  • int: representa un número entero (integer).
  • uint: representa un número entero sin signo, que no puede tener valor negativo.
  • bool: representa un valor lógico o boolean.

Aquí algunos ejemplos de números enteros:

var sinsigno uint = 1000

var entero int = 1234
var entero2 int = 5678
var entero3 = entero + entero2

Si te das cuenta, en el caso de la variable entero3 no estoy indicando el tipo y estoy dejando que lo infiera. Se trata de una suma de entero y entero2, y como ambas variables son de tipo int, entonces el resultado también tiene que ser de tipo int.

En cuanto al tipo uint, prueba a intentar asignarle un valor negativo a una variable previamente declarada de este tipo y verás que el compilador o el editor de textos inteligente genera un error porque no se puede guardar un valor negativo en una variable de este estilo.

En cuanto a los booleanos, estos ejemplos nos permiten declarar algunos lógicos. Como veis, tampoco van entre comillas, porque de otro modo Go pensaría que son cadenas. Cualquier editor de textos decente debería pintar las palabras true y false con otro color porque se comporta como una palabra reservada.

var cierto bool = true
var mentira bool = false
Lista de reproducción
  1. 1
    Instalar Go
    5 minutos
  2. 2
    Configurar Go en Windows a mano
    4 minutos
  3. 3
    Configurar Go en Linux y MacOS a mano
    5 minutos
  4. 4
    Escribir el Hola Mundo
    11 minutos
  5. 5
    Variables con var
    10 minutos
  6. 6
    Los tipos de datos en Go
    9 minutos
  7. 7
    Variables tipadas e inferencia de tipos
    8 minutos
  8. 8
    Operador := y múltiples variables
    7 minutos
  9. 9
    Constantes
    4 minutos
  10. 10
    Funciones básicas
    6 minutos
  11. 11
    Paso de parámetros a funciones
    7 minutos
  12. 12
    Retorno de funciones
    5 minutos
  13. 13
    Operadores aritméticos
    6 minutos