Variable - Tipos de Datos
Que son las variables y por consiguiente los tipos de datos, ¿cuales hay en go? ¿que tipos de datos se usan más frecuentes? etc...
Last updated
Que son las variables y por consiguiente los tipos de datos, ¿cuales hay en go? ¿que tipos de datos se usan más frecuentes? etc...
Last updated
Referencia:
En Go, hay varios tipos de datos disponibles, que se pueden clasificar en cuatro categorías principales:
Tipos de datos básicos:
bool
: representa un valor booleano (true
o false
).
string
: representa una cadena de texto.
int
: representa un número entero.
float32
y float64
: representan números en coma flotante.
Tipos de datos compuestos:
array
: representa una colección de elementos del mismo tipo.
slice
: es similar a un array, pero su tamaño puede ser modificado dinámicamente.
map
: representa una colección de pares clave-valor.
struct
: representa un conjunto de campos con diferentes tipos de datos.
Tipos de datos de referencia:
pointer
: representa la dirección de memoria de una variable.
function
: representa una función.
interface
: define un conjunto de métodos que una estructura debe implementar.
Tipos de datos especiales:
chan
: se utiliza para la comunicación entre goroutines.
complex64
y complex128
: representan números complejos.
No se puede redefinir el valor de una variable luego de haber sido definida →
Es importante tener en cuenta que los tipos de datos básicos en Go son valores inmutables. Esto significa que una vez que se define su valor, no se puede cambiar. Si se desea actualizar el valor de una variable, se debe crear una nueva variable con el nuevo valor.
Linea 19 con Linea 24
Lo mismo pasa con querer intentar cambiar el tipo de dato de una variable que ya ha sido definida su tipo de dato, no se puede redefinir.
float32
: Representa números de punto flotante de 32 bits.
float64
: Representa números de punto flotante de 64 bits, que tienen mayor precisión.
complex64
: Representa números complejos con partes reales e imaginarias de tipo float32
.
complex128
: Representa números complejos con partes reales e imaginarias de tipo float64
.
byte
: Es un alias para uint8
, que puede contener valores de 0 a 255.
rune
: Es un alias para int32
, que se utiliza para representar un carácter Unicode. En el ejemplo, 'A'
es el carácter que corresponde al valor 65 en Unicode.
En Go, los tipos de datos compuestos son tipos de datos que están formados por la combinación de uno o más valores de tipos de datos básicos.
El propósito del alias byte
es dejar claro el momento en que el programa usa bytes a modo de medición informática común en elementos de cadenas de caracteres, en contraposición a enteros pequeños no relacionados con la medición de datos de byte. Aunque byte
y uint8
son idénticos una vez que se compila el programa, byte
se utiliza a menudo para representar datos de caracteres en formato numérico, mientras que uint8
está diseñado para ser un número en su programa.
El alias rune
es un poco diferente. Si bien byte
y uint8
contienen exactamente los mismos datos, un rune
puede ser de un solo byte o de cuatro, un rango determinado por int32
. Un rune
se utiliza para representar un carácter Unicode, mientras que solo los caracteres ASCII se pueden representar únicamente con un tipo de datos int32
.
Array: este tipo de datos representa una colección de elementos del mismo tipo. Los arrays en Go tienen una longitud fija que se define en el momento de la creación del array.
Slice: este tipo de datos es similar a un array, pero su tamaño puede ser modificado dinámicamente. Un slice se crea a partir de un array y se puede acceder a sus elementos utilizando la misma sintaxis que un array.
Map: este tipo de datos representa una colección de pares clave-valor. Cada clave en el mapa debe ser única y el valor asociado puede ser de cualquier tipo de datos. Por ejemplo:
La regla de oro es:
Usar
make
para slices, maps y channels y new para valors numéricos, structs etc.
Se puede comprobar si una clave existe en un mapa utilizando la función len
.
Se puede recorrer un mapa utilizando un bucle for
.
Struct: este tipo de datos representa un conjunto de campos con diferentes tipos de datos. Las estructuras se utilizan para agrupar diferentes tipos de datos en una única variable.
Es importante tener en cuenta que los tipos de datos compuestos en Go se utilizan para representar datos más complejos y estructurados en un programa.
Los arrays, slices, maps y struct se utilizan para agrupar diferentes tipos de datos en una única variable.
Matrices: Una matriz es una secuencia ordenada de elementos. La capacidad de una matriz se define en el momento de su creación. Una vez que se asigna el tamaño a una matriz, este ya no se puede cambiar. Debido a que el tamaño de una matriz es estático, significa que se asigna memoria solo una vez. Esto hace que el trabajo con matrices resulte un tanto rígido, pero aumenta el rendimiento de su programa. Debido a esto, las matrices suelen utilizarse al optimizar programas. Los segmentos, que veremos a continuación, son más flexibles y constituyen lo que se podría considerar como matrices en otros lenguajes.
Las matrices se definen al declarar el tamaño de estas y luego el tipo de datos con los valores definidos entre llaves { }
.
Una matriz de cadenas tiene el siguiente aspecto:
Como ya lo mencioné anteriormente, los segmentos son similares a las matrices, pero son mucho más flexibles. Veamos este tipo de datos mutable.
Function
:este tipo de datos representa una función. Las funciones en Go son tipos de datos de primera clase, lo que significa que se pueden asignar a variables y pasar como argumentos a otras funciones, y que ademas dentro de la función se puede contener una cantidad de código que hará algo en especifico según la logica que se lleve.
Algo importante por saber en Go: El nombre de la función en Go debe comenzar con una letra minúscula para funciones no exportadas (privadas) o mayúscula para funciones exportadas (públicas), aqui lo noté porque cuando llamaba por fuera del main con minuscula no podía llamarse a la funcion pero cuando le cambiaba a MAY la primera letra ahi si se definía la function como publica.
Si el nombre de la función o variable comienza con minúscula, será privada al paquete donde se define. Solo puede ser accedida desde dentro de ese mismo paquete.
Si el nombre comienza con mayúscula, será exportada (pública) y puede ser accedida desde otros paquetes.
Por ejm: Declarar una funcion que sume 2 numeros:
Este tipo de datos representa la dirección de memoria de una variable. Los punteros se utilizan para acceder y manipular el valor de una variable indirectamente, a través de su dirección de memoria.
&
y *
&
: Lo usas para obtener la dirección de memoria de una variable. Es como decir: "Dame la ubicación donde está este valor en la memoria."
*
: Lo usas para acceder al valor que está almacenado en esa dirección. Una vez que tienes la dirección (guardada en el puntero), puedes "desreferenciarla" con *
para obtener el valor real en esa ubicación.
Primero usas &
para obtener la dirección (el puntero) y luego usas *
para acceder al valor en esa dirección.
Rapidez: El puntero no necesita "buscar" el valor en la memoria una vez que tiene la dirección. Es más rápido acceder directamente a un valor a través de su puntero, especialmente cuando trabajas con estructuras grandes o datos en lugares específicos de la memoria.
El puntero (*
) guarda la dirección de memoria donde está un valor, no el valor mismo.
El operador &
obtiene la dirección de memoria de una variable.
El operador *
desreferencia el puntero para acceder al valor en esa dirección.
Eficiencia: Usar punteros es útil para evitar copias innecesarias de grandes estructuras o arreglos, haciendo el acceso a los datos más rápido y eficiente.
En Go, cuando se recibe un argumento como puntero se suele comprobar si es nulo o no antes de realizar cualquier operación en él para evitar excepciones en el programa.
Esta técnica se usa con frecuencia para comprobar la presencia de nil
:
Interfaces
:Este tipo de datos define un conjunto de métodos que una estructura debe implementar. Las interfaces se utilizan para definir un comportamiento común que se puede compartir entre diferentes tipos de estructuras.
Lo que hace una interfaz es poder definir un conjunto de metodos que podemos usar para una estructura en su implementacion, basicamente poder integrarle metodos a una estructura mediante la interfaz.
Es importante tener en cuenta que los tipos de datos de referencia en Go se utilizan para representar datos que no están directamente almacenados en una variable, sino que se encuentran en una ubicación de memoria separada.
Los punteros se utilizan para acceder a la ubicación de memoria y manipular el valor de una variable indirectamente. Las funciones se utilizan para encapsular un comportamiento y reutilizarlo en diferentes partes del programa.
Las interfaces se utilizan para definir un comportamiento común que se puede compartir entre diferentes tipos de estructuras.