Programación en Go. Mario Macías Lloret
Чтение книги онлайн.
Читать онлайн книгу Programación en Go - Mario Macías Lloret страница 8
Go es un lenguaje con “tipado estático”, lo que significa que cada variable tiene un tipo de dato asociado y solo podrá guardar valores de su tipo de dato.
Go provee los siguientes tipos de datos básicos, a partir de los cuales es posible definir variables y ejecutar operaciones básicas:
• bool es el tipo booleano. Los posibles valores que puede tomar son dos: true (cierto) o false (falso).
• string permite guardar cadenas de texto, y acepta cualquier carácter Unicode mediante la codificación UTF-8 (es decir, todos los caracteres del alfabeto latino, más caracteres de otras culturas, incluso emojis).
• int es un número entero con signo (es decir, permite guardar tanto números enteros positivos como negativos). Su tamaño depende de la plataforma para la cual se compila el programa. Esto significa que el compilador escogerá el tamaño de las variables int que mejor se adapten a la arquitectura del procesador para el cual se compila (generalmente, concordará con el número de bits del procesador: 32 o 64).
– Cuando sea necesario concretar con exactitud el tamaño de una variable, se pueden usar los siguientes tipos: int8, int16, int32, int64 para números enteros con signo de 8, 16, 32 y 64 bits, respectivamente.
• uint es un número entero sin signo (es decir, no acepta números negativos). Al igual que int, su tamaño dependerá de la plataforma (32 o 64 bits).
– Cuando se requiera concretar con exactitud el tamaño de una variable, se pueden usar los siguientes tipos: uint8, uinti6, uint32 o uint64.
• byte es el equivalente de uint8.
• rune es un equivalente para int32 y se usa para representar un carácter (letras, números, signos de puntuación, emojis, y un largo etcétera).
• float32 y float64 representan números de coma flotante (también llamados “números reales”) de 32 y 64 bits, respectivamente.
• complex64 y complex128 son números complejos cuyas partes real e imaginaria están representadas por números reales de 32 y 64 bits, respectivamente.
– Un literal de número complejo se escribe como en el siguiente ejemplo: 2.23 + 3i.
2.2 CADENAS DE TEXTO. EL TIPO string
Go permite definir cadenas de texto explícitamente, insertando un texto cualquiera entre comillas dobles:
texto := "- Hola, ¿cómo estás?"
Si una cadena ha de contener un texto mostrado en diversas líneas, puede introducir el carácter especial de nueva línea \n allá donde quiera que termine una línea y empiece otra:
texto := "- Hola, ¿cómo estás?\n- Estoy bien, gracias."
Si una cadena ha de contener comillas dobles en su interior, estas deben especificarse como un carácter especial \", para que Go no las confunda como el final de una cadena de texto:
texto := "Podría decirse que estoy \"bien\"..."
Cuando un texto contiene múltiples líneas o comillas dobles, puede resultar más limpio substituir el delimitador de comillas dobles por el de “acento grave”; esto le permitirá escribir cadenas en múltiples líneas, tomando los saltos de línea como literales. El equivalente a la cadena anterior, sería:
texto := `- Hola, ¿cómo estás? - Estoy "bien", gracias.`
No debe confundir los delimitadores de cadenas con la comilla simple ', que sirve para especificar caracteres individuales, del tipo byte o rune.
2.3 DEFINICIÓN DE VARIABLES
La manera de definir una variable, dado un nombre y un tipo de dato, es:
var <nombre> <tipo> [ = <valor> ]
Por ejemplo:
var dias int var meses int = 12
Las líneas anteriores definirían una variable llamada dias, del tipo int, y otra variable llamada meses, del tipo int, a la que se le asigna un valor inicial de 12.
Si no se provee un valor inicial, las variables serán inicializadas automáticamente con el “valor cero” de cada tipo de dato: 0 para tipos numéricos, false para bool, y la cadena vacía "" para string.
En aras de la brevedad, se puede omitir tanto la palabra var como su tipo si se usa el operador de inicialización :=:
meses := 12
El compilador de Go inferirá el tipo de la variable meses a un int (ya que es un número sin parte decimal), y aunque el valor de la variable cambie, el tipo siempre deberá ser int.
El símbolo := solo se puede usar para definir una variable. Una vez definida, se usará el operador de asignación = si se desea cambiar su valor. Por ejemplo:
paso := 1 // definición de la variable con un valor inicial paso = 2 // cambio del valor de la variable
Las guías de estilo de Go recomiendan declarar variables con el operador : = siempre que se pueda, aunque las variables globales y las que no tengan valor inicial deberán declararse mediante la forma precedida por var.
2.4 CONVERSIONES EXPLÍCITAS DE TIPOS
En Go, al contrario de lo que ocurre en otros lenguajes de tipado estático, si se quiere asignar una variable numérica a otra variable de otro tipo numérico, se deberá explicitar el tipo de destino de la siguiente manera:
var segundos int8 = 30 var horas int horas = int(segundos)
En el fragmento anterior, se indica a Go que el valor de la variable segundos, del tipo int8, se va a copiar en otra variable del tipo int. Aunque es obvio que cualquier valor del tipo int8 (8 bits) cabe en una variable del tipo int (32 o 64 bits), Go obliga a hacer explícita esta conversión.
Si la conversión se hace desde un tipo entero de tamaño superior al tipo de destino, se usan los bits menos significativos del tipo de origen que caben en el tipo de destino.
Si la conversión se hace desde un tipo de coma flotante, se trunca la parte con decimales y se asigna la parte entera. Por ejemplo:
distancia := 12.78 kms := int(distancia)
En el ejemplo anterior, la variable kms tomará el valor 12 (eliminando, sin redondeo alguno, el 0.78 de la variable original).
2.5 CONSTANTES
Una constante es un valor literal al que se le asigna un nombre, que no puede cambiar durante la vida del programa.