Jesús Mendoza

Notas de Go - Tipos

Acabo de emprender un viaje para aprender Go y he decidido hacer este "blog" para llevar un registro de todo lo que vaya aprendiendo, además de tener una guía a la cual acudir cuando si se me olvida algo. Quiero dejar claro que no pretendo enseñar Go ya que soy un novato aunque espero que estas notas puedan ayudan a resolver alguna duda de alguien que está empezando en este mundo como yo.

En este primer capítulo empezaré hablando sobre los tipos que existen en Go

¿Qué son "tipos" en Go?

Los "tipos" nos permiten definir el tipo de una variable, es decir, si queremos declarar una variable que contenga una cadena de texto podemos usar el tipo string. Los tipos en Go son importantes ya que determinan que valores se pueden almacenar en una variable y que métodos podremos utilizar en dicha variable, además que en muchos casos tendremos que definir el tipo que estamos esperando.

Los tipos que existen en Go son los siguientes:

  • string
  • bool
  • int8, uint8, int16, uint16, int32, uint32, int64, uint64, int, uint, uintptr. float32, float64. complex64, complex128, byte, rune

Los tipos compuestos que existen en go son los siguientes:

  • array
  • slice
  • map
  • struct
  • func
  • pointer
  • channel
  • interface

También podemos crear nuestros propios tipos (alias)

Definiendo cada tipo

  • string: Nos permite crear variables con un valor de tipo string
  • bool: Nos permite crear variables de tipo booleano (true o false)
  • int8: Nos permite crear variables numéricas con valores desde -128 a 127
  • uint8: Nos permite creear variables numéricas con valores desde 0 a 255
  • int16: Nos permite crear variables numéricas con valores desde -32768 a 32767
  • uint16: Nos permite crear variables numéricas con valores desde 0 a 65535
  • int32: Nos permite crear variables numéricas con valores desde -2147483648 a 2147483647
  • uint32: Nos permite crear variables numéricas con valores desde 0 a 4294967295
  • int64: Nos permite crear variables numéricas con valores desde -9223372036854775808 a 9223372036854775807
  • uint64: Nos permite crear variables numéricas con valores desde 0 a 18446744073709551615
  • int: Nos permite crear variables numéricas con valores de 32 o 64 bits
  • uint: lo mismo que int
  • float32: Nos permite crear variables numéricas con valores desde -128 a 127
  • float64: Nos permite crear variables numéricas con valores desde -128 a 127
  • uintptr: Nos permite almacenar un valor sin interpretar de un pointer
  • byte: lo mismo que uint8
  • rune: lo mismo que int32

Definiendo cada tipo compuesto

  • array: Nos permite almacenar una serie de elementos de un mismo tipo
  • slice: Son una abstracción sobre los arrays pero son más fáciles de usar (casi siempre usaremos slices sobre arrays)
  • struct: Como los array y slice, nos permite almacenar una serie de elementos pero en este caso pueden ser de diferentes tipos
  • func: Nos permite definir funciones
  • pointer: Dirección en memoria donde se encuentra almacenado el valor de una variable
  • interface: Las interfaces son una colección de métodos

¿Cómo podemos usar los tipos?

Hay muchas formas de utilizar tipos. Ya sea en argumentos de funciones, variables, structs, etc.

Para declarar variables y definir su tipo lo podemos hacer de la siguiente manera:

var nombre string = "Jesús"

En la declaración anterior, la primera palabra var significa que queremos crear una variable, nombre corresponde al identificador que le asignamos a dicha variable y string corresponde al tipo. Si hacemos lo siguiente nos dará un error, ya que le estamos asignando "Jesús" a una variable de tipo numérico:

var nombre int = "Jesús"

Nota: Hay que tener en cuenta que declarando variables usando la sintaxis corta determinará el tipo correcto de nuestras variables automáticamente. Por ejemplo, el siguiente código creará una variable de tipo string sin necesidad de nosotros tener que definirlo

nombre := "Jesús"

En resumen

Gracias a los tipos y a que Go es un lenguaje de programación compilado, podemos detectar errores antes de que nuestro código sea enviado a producción y/o durante el desarrollo, lo que nos permite crear software más tolerante a fallos.

En las próximas notas hablaremos más a profundidad de tipos de datos compuestos (struct, arrays, etc).