Apuntes de mis lecturas (readings)
Lectura: «The Go Programming Language (Homepage)»
Fuente(s):
Go es un lenguaje de programación de código abierto que facilita la construcción de software simple, fiable y eficiente.
Lectura: «A Tour of Go»
Fuente(s):
Hello, 世界
TODO
Paquetes (packages)
- Todo programa escrito en Go se compone de uno o más paquetes.
- Los programas comienzan su ejecución desde el paquete
main
. - Los programas declaran hacer uso de paquetes mediante la sentencia
import
. - Por convención, el nombre del paquete será el mismo del último de los elementos de la ruta de importación.
- El siguiente programa utiliza los paquetes
fmt
ymath/rand
:
1package main
2
3import (
4 "fmt"
5 "math/rand"
6)
7
8func main() {
9 fmt.Println("My favorite number is", rand.Intn(10))
10}
Importación (imports)
En un programa Go, los paquetes que se desean importar pueden ser indicados mediante múltiples sentencias import
separadas:
pero también, dichos paquetes pueden venir agrupados dentro de una única sentencia import, utilizando paréntesis:
El método considerado como buen estilo es el segundo, y se le suele llamar sentencia de importación factorizada (factored import sentence).
Identificadores exportados (exported names)
En Go un nombre es exportado si éste comienza con una letra mayúscula; por ejemplo, tanto Pi
como PI
serán identificadores exportados.
Al importar un paquete, sólo podemos hacer referencia a los identificadores exportados. Los nombres no exportados no son accesibles fuera de sus paquetes correspondientes.
Funciones (functions)
Una función puede tener cero o más parámetros.
En el siguiente ejemplo add
tiene dos parámetros del tipo entero (int
), llamados x
e y
.
La declaración del tipo de dato, tando de los parámetros como de la función, se realiza despúes de declarar el identificador.
More info at: https://blog.golang.org/gos-declaration-syntax
Cuando dos o más parámetros consecutivos comparten el mismo tipo de dato, su pueden omitir las declaraciones de tipos de datos de todos excepto del último.
Resultados múltiples (multiple results)
Una función puede devolver cualquier número de resultados.
Por ejemplo, la función swap
siguiente, devuelve dos cadenas de caracteres (strings).
La declaración e inicialización simultánea de variables, puede se acortada mediante el operador :=
, así:
a, b := swap("hello", "world")
Cuando los tipos de datos de las variables inicializadas pueden ser inferidos, no necesitan ser indicados explícitamente.
Resultados con nombre (named results)
En Go los valores de retorno pueden venir identificados. Para ello, la declaración de la función correspondiente, debe incluir la declaración de los tipos y nombres de sus valores de retorno:
Los nombres de los resultados identificados se utilizan para asignar nombres con significado dentro del cuerpo de la función. Dichos nombres se utilizan para asignar los valores de retorno correspondientes.
Cuando una sentencia return
no indica explícitamente sus argumentos, ésta utiliza los últimos valores asignados a los resultados identificados. Dichas sentencias se denominan “retornos desnudos (naked return)”.
Es recomendable usar solo retornos desnudos cuando las funciones son cortas, para facilitar la lectura del código.
Cuando queremos asignar un valor a una variable o a un resultado con nombre, debemos utilizar el operador =
.
Variables
Las sentencias var
permiten declarar listas de variables. La sintaxis de dichas listas es similar a las de las declaraciones de los parámetros de las funciones, por lo que el nombre de su tipo de dato puede ir al final.
Una sentencia var
puede estar a nivel de paquete o a nivel de función.
1package main
2
3import "fmt"
4
5var c, python, java bool
6
7func main() {
8 var i int
9 fmt.Println(c, python, java, i)
10}
Las variables a nivel de función deben ser utilizadas, de lo contrario, el compilador mostrará un mensaje de error:
main.go:6: i declared and not used
Variables con inicializadores (Variables with initializers)
Las sentencias var
pueden incluir un inicializador por variable.
En el caso de que se incluya el inicializador, la declaración de los tipos de dato de las variables puede ser omitida.
1package main
2
3import "fmt"
4
5var i, j int = 1, 2
6
7func main() {
8 var c, python, java = true, false, "no!"
9 fmt.Println(i, j, c, python, java)
10}
Cuando se declara una lista de variables, su lista de inicializadores asociada debe tener la misma longitud.
Lectura: «Learn Google Go ― Golang Programming for Beginners» ―Stackskills.com
Familiarizándonos con Go
Introducción al curso
-
Go es un lenguaje desarrollado por Google, que sirve para satisfacer múltiples casos de uso.
-
El objetivo del curso es conocer la estructura básica del lenguaje.
-
El curso está dividido en cuatro unidades:
- Familiarizándonos con Go (esta unidad).
- Sentencias condicionales y bucles.
- Colecciones en Go.
- Funciones, métodos y otros temas.
Instalación de Go
-
Go puede ser instalado mediante un gestor de paquetes, o descargando el archivo binario de distribución desde la página de descargas.
-
En el primer caso, se descargará la versión adecuada del instalador de Go, y se iniciará la ejecución de éste.
-
En el segundo caso, si por ejemplo estamos utilizando un sistema Windows, podremos usar un gestor de paquetes (p.e. Scoop), de una manera similar a:
C:\> sudo scoop install -g go
-
Comprobando la instalación
TODO
Accediendo a la documentación de Go
TODO
Sentencias condicionales y bucles
TODO
Colecciones en Go
TODO
Funciones, métodos y otros temas
TODO
Lectura: «How to Write Go Code»
Fuente(s):
Introduction
-
La go tool es la manera estándar de recuperar, construir e instalar paquetes y comandos escritos en Go.
-
La go tool requiere que organicemos nuestro código de una manera específica.
Organización del código
-
Los programadores Go suelen trabajar en un sólo espacio de trabajo.
-
Un espacio de trabajo puede contener varios repositorios (p.e. repositorios Git, Mercurial, entre otros).
-
Cada repositorio puede contener uno o más paquetes.
-
Un paquete consiste en uno o más ficheros fuente en un mismo directorio.
-
El siguiente es un ejemplo de la estructura de un espacio de trabajo en Go:
~/go/ bin/ hello outyet src/ github.com/golang/example/ .git hello/ hello.go outyet/ main.go main_test.go stringutil/ reverse.go reverse_test.go golang.org/x/image/ .git bmp/ reader.go writer.go ...
-
La variable de entorno
GOPATH
contiene la ubicación de nuestro espacio de trabajo.
Lectura: «The Go Programming Language» ―Alan A.A. Donova & Brian W. Kernighan
Fuente(s):
- <donovan-et-al.go-programming-language.bk.pdf>
TODO
Lectura: «The Way To Go» ―Ivo Balbaert
Fuente(s):
- <balbaert.way-go_.bk.pdf>
TODO
Librerías de terceras partes (3rdparty)
Librería: «fasthttp»
Sinopsis
- Implementación rápida del protocolo HTTP en Go.
TODO