The tnotstar's Website

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)

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	fmt.Println("My favorite number is", rand.Intn(10))
}

Importación (imports)

En un programa Go, los paquetes que se desean importar pueden ser indicados mediante múltiples sentencias import separadas:

import "fmt"
import "math"

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

import (
	"fmt"
	"math"
)

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.

func add(x int, y int) int {
	return x + 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.

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

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

func swap(x, y string) (string, string) {
	return y, x
}

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:

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

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.

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

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.

package main

import "fmt"

var c, python, java bool

func main() {
	var i int
	fmt.Println(c, python, java, i)
}

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.

package main

import "fmt"

var i, j int = 1, 2

func main() {
	var c, python, java = true, false, "no!"
	fmt.Println(i, j, c, python, java)
}

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

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

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