El sitio web de tnotstar

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. Entre sus características resaltan:

Casos de uso de Go

Go ha sido diseñado para satisfacer los siguiente casos de uso:

Lectura: «A Tour of Go»

Fuente(s):

El recurso denominado “A Tour of Go” es el tutorial oficial de Go. Allí podremos editar y ejecutar nuestros primeros ejemplos de programas escritos en Go.

Las siguientes secciones son un resumen de dicho tutorial.

Hello, 世界

1package main
2
3import "fmt"
4
5func main() {
6    fmt.Println("Hello, 世界")
7}

Paquetes (packages)

 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:

1import "fmt"
2import "math"

pero también, dichos paquetes pueden venir agrupados dentro de una única sentencia import, utilizando paréntesis:

1import (
2	"fmt"
3	"math"
4)

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.

1func add(x int, y int) int {
2	return x + y
3}

La declaración del tipo de dato, tanto de los parámetros como de la función, se realiza despúes de declarar el identificador.

More info at: https://go.dev/blog/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.

1func add(x, y int) int {
2	return x + y
3}

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).

1func swap(x, y string) (string, string) {
2	return y, x
3}

La declaración e inicialización simultánea de variables, puede ser 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:

1func split(sum int) (x, y int) {
2	x = sum * 4 / 9
3	y = sum - x
4	return
5}

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.

1func split(sum int) (x, y int) {
2    x = sum * 4 / 9
3    y = sum - x
4    return
5}

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
Instalación de Go
Comprobando la instalación

Para comprobar la instalación, primero debemos ejecutar el siguiente comando, para verificar que Go está en nuestra ruta de ejecución (variable de entorno PATH):

$  go version

Debemos observar un texto con la versión de Go que hayamos instalado.

Ahora podremos crear un programa hello-world similar al primer ejemplo del Tour de Go, así:

$  vi hello.go

el contenido del fichero hello.go será algo como esto:

1package main
2
3import "fmt"
4
5func main() {
6    fmt.Println("Hello, world!")
7}

y para ejecutarlo haremos un:

$  go run hello.go

y si la instalación ha sido exitosa, debemos observar el mensaje en pantalla correspondiente:

Hello, world!
Accediendo a la documentación de Go

Antes de comenzar debemos saber que en Go todo está contenido dentro de un paquete (package), por lo que es de esperarse que dispongamos de documentación acerca de los paquetes del sistema o librería estándar.

Para obtener acceso a dicha información, p.e. la del paquete fmt que hemos utilizado en el ejemplo anterior, debemos ejecutar el comando siguiente:

$ go doc fmt

que mostrará en pantalla la información disponible acerca del paquete indicado.

Otra manera de obtener esta documentación es visitando la siguiene URL: https://pkg.go.dev, y haciendo una búsqueda desde allí.

Tipos de dato y declaraciones

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

Organización del código

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

TODO


  1. Para bien, y para mal↩︎