{"id":7921,"date":"2022-08-12T13:01:46","date_gmt":"2022-08-12T11:01:46","guid":{"rendered":"https:\/\/xn--nicols-tta.es\/?p=7921"},"modified":"2022-08-12T13:01:46","modified_gmt":"2022-08-12T11:01:46","slug":"aprendizaje-go","status":"publish","type":"post","link":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/","title":{"rendered":"APRENDIZAJE GO"},"content":{"rendered":"\n<p class=\"has-text-align-left\"><strong><em>Empezando con Go<\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/xn--nicols-tta.es\/wp-content\/uploads\/2022\/07\/GO.jpg\" alt=\"\" class=\"wp-image-7891\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Observaciones<\/p>\n\n\n\n<p class=\"has-text-align-left\">Go es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n de<br \/>Algol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-text-align-left\"><br \/>funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Ejemplos <\/p>\n\n\n\n<p class=\"has-text-align-left\">\u00a1Hola Nicol\u00e1s!<\/p>\n\n\n\n<p class=\"has-text-align-left\">Coloque el siguiente c\u00f3digo en un nombre de archivo hola.go :<\/p>\n\n\n\n<p>package main<br \/>import \u00abfmt\u00bb<br \/>func main() {<\/p>\n\n\n\n<p>fmt.Println(\u00abHola Nicol\u00e1s\u00bb)<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Cuando Go est\u00e1<a href=\"https:\/\/go.dev\/dl\/\"> instalado correctamente<\/a>, este programa se puede compilar y ejecutar de la<br \/>siguiente manera:<br \/>go run hola.go<\/p>\n\n\n\n<p class=\"has-text-align-left\">Una vez que est\u00e9 satisfecho con el c\u00f3digo, se puede compilar en un ejecutable ejecutando:<br \/>go build hola.go<\/p>\n\n\n\n<p class=\"has-text-align-left\"><br \/>Esto crear\u00e1 un archivo ejecutable adecuado para su sistema operativo en el directorio actual, que<br \/>luego puede ejecutar con el siguiente comando:<\/p>\n\n\n\n<p class=\"has-text-align-left\"><br \/>En Linux, OSX y otros sistemas similares a Unix:<br \/>.\/hola<\/p>\n\n\n\n<p class=\"has-text-align-left\"><br \/>En Windows:<br \/>hola.exe<\/p>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-left\"><a href=\"https:\/\/blog.codinghorror.com\/\">HORROR DE CODIFICACI\u00d3N<\/a><\/h1>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">programaci\u00f3n y factores humanos<\/h2>\n\n\n\n<p class=\"has-text-align-left\"><strong><span style=\"text-decoration: underline\"><a href=\"https:\/\/blog.codinghorror.com\/why-cant-programmers-program\/\">FizzBuzz <\/a><\/span><\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\">Otro ejemplo de los programas de estilo \u00abHello World\u00bb es <a href=\"https:\/\/blog.codinghorror.com\/why-cant-programmers-program\/\">FizzBuzz<\/a> . Este es un ejemplo de una implementaci\u00f3n de<a href=\"https:\/\/blog.codinghorror.com\/why-cant-programmers-program\/\"> FizzBuzz<\/a>. Muy idiom\u00e1tico entra en juego aqu\u00ed. <\/p>\n\n\n\n<p class=\"has-text-align-left\">package main <\/p>\n\n\n\n<p class=\"has-text-align-left\">\/\/ Simple fizzbuzz implementation <\/p>\n\n\n\n<p class=\"has-text-align-left\">import \u00abfmt\u00bb <\/p>\n\n\n\n<p class=\"has-text-align-left\">func main() { <\/p>\n\n\n\n<p class=\"has-text-align-left\">for i := 1; i &lt;= 100; i++ { <\/p>\n\n\n\n<p class=\"has-text-align-left\">s := \u00ab\u00bb <\/p>\n\n\n\n<p class=\"has-text-align-left\">if i % 3 == 0 {<\/p>\n\n\n\n<p class=\"has-text-align-left\"> s += \u00abFizz\u00bb<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<br \/>if i % 5 == 0 {<br \/>s += \u00abBuzz\u00bb<br \/>}<br \/>if s != \u00ab\u00bb {<br \/>fmt.Println(s)<br \/>} else {<br \/>fmt.Println(i)<br \/>}<br \/>}<br \/>}<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/xn--nicols-tta.es\/wp-content\/uploads\/2022\/08\/go_amex_case_study_logo-1024x530.png\" alt=\"\" class=\"wp-image-7947\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Listado de variables de entorno de Go<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Las variables de entorno que afectan a la herramienta go pueden verse a trav\u00e9s del comando go<br \/>env [var \u2026] :<\/p>\n\n\n\n<p class=\"has-text-align-left\">$ go env<br \/>GOARCH=\u00bbamd64&#8243;<br \/>GOBIN=\u00bb\/home\/yourname\/bin\u00bb<br \/>GOEXE=\u00bb\u00bb<br \/>GOHOSTARCH=\u00bbamd64&#8243;<br \/>GOHOSTOS=\u00bblinux\u00bb<br \/>GOOS=\u00bblinux\u00bb<br \/>GOPATH=\u00bb\/home\/yourname\u00bb<br \/>GORACE=\u00bb\u00bb<br \/>GOROOT=\u00bb\/usr\/lib\/go\u00bb<br \/>GOTOOLDIR=\u00bb\/usr\/lib\/go\/pkg\/tool\/linux_amd64&#8243;<br \/>CC=\u00bbgcc\u00bb<br \/>GOGCCFLAGS=\u00bb-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=\/tmp\/go-<br \/>build059426571=\/tmp\/go-build -gno-record-gcc-switches\u00bb<br \/>CXX=\u00bbg++\u00bb<br \/>CGO_ENABLED=\u00bb1&#8243;<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Aplazar<\/h2>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-align-left\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Una declaraci\u00f3n defer empuja una llamada de funci\u00f3n a una lista. La lista de llamadas guardadas<br \/>se ejecuta despu\u00e9s de que vuelve la funci\u00f3n que la rodea. El aplazamiento se usa com\u00fanmente<br \/>para simplificar las funciones que realizan varias acciones de limpieza.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Sintaxis<br \/>\u2022 diferir someFunc (args)<br \/>\u2022 aplazar func () {\/\/ el c\u00f3digo va aqu\u00ed} ()<br \/>Observaciones<br \/>La funci\u00f3n de defer inyecta un nuevo marco de pila (la funci\u00f3n llamada despu\u00e9s de la palabra<br \/>clave de defer ) en la pila de llamadas debajo de la funci\u00f3n que se est\u00e1 ejecutando actualmente.<br \/>Esto significa que se garantiza que el aplazamiento se ejecute siempre que la pila se desenrolle<br \/>(si su programa falla o obtiene un SIGKILL , el aplazamiento no se ejecutar\u00e1).<br \/>Examples<br \/>Diferir lo b\u00e1sico<br \/>Una declaraci\u00f3n diferida en Go es simplem<\/p>\n\n\n\n<p class=\"has-text-align-left\">Una declaraci\u00f3n diferida en Go es simplemente una llamada de funci\u00f3n marcada para ejecutarse<br \/>en un momento posterior. La declaraci\u00f3n diferida es una llamada de funci\u00f3n ordinaria prefijada<br \/>por la palabra clave defer .<br \/>defer someFunction()<br \/>Una funci\u00f3n diferida se ejecuta una vez la funci\u00f3n que contiene los defer retorne el comando. La<br \/>llamada real a la funci\u00f3n diferida se produce cuando la funci\u00f3n de cierre:<br \/>\u2022 ejecuta una declaraci\u00f3n de retorno<br \/>\u2022 se cae del final<br \/>\u2022 p\u00e1nico<br \/>Ejemplo:<br \/>func main() {<br \/>fmt.Println(\u00abFirst main statement\u00bb)<br \/>defer logExit(\u00abmain\u00bb) \/\/ position of defer statement here does not matter<br \/>fmt.Println(\u00abLast main statement\u00bb)<br \/>}<br \/><\/p>\n\n\n\n<p class=\"has-text-align-left\">func logExit(name string) {<br \/>fmt.Printf(\u00abFunction %s returned\\n\u00bb, name)<br \/>}<br \/>Salida:<br \/>First main statement<br \/>Last main statement<br \/>Function main returned<br \/>Si una funci\u00f3n tiene varias declaraciones diferidas, forman una pila. El \u00faltimo defer es el primero<br \/>que se ejecuta despu\u00e9s de que se devuelve la funci\u00f3n de cierre, seguido de las llamadas<br \/>subsiguientes a los defer anteriores en orden (a continuaci\u00f3n, el ejemplo devuelve causando un<br \/>p\u00e1nico):<\/p>\n\n\n\n<p class=\"has-text-align-left\">func main() {<br \/>defer logNum(1)<br \/>fmt.Println(\u00abFirst main statement\u00bb)<br \/>defer logNum(2)<br \/>defer logNum(3)<br \/>panic(\u00abpanic occurred\u00bb)<br \/>fmt.Println(\u00abLast main statement\u00bb) \/\/ not printed<br \/>defer logNum(3) \/\/ not deferred since execution flow never reaches this line<br \/>}<br \/>func logNum(i int) {<br \/>fmt.Printf(\u00abNum %d\\n\u00bb, i)<br \/>}<br \/>Salida:<\/p>\n\n\n\n<p class=\"has-text-align-left\">First main statement<br \/>Num 3<br \/>Num 2<br \/>Num 1<br \/>panic: panic occurred<br \/>goroutine 1 [running]:<br \/>\u2026.<br \/>Tenga en cuenta que las funciones diferidos han evaluado sus argumentos en el momento defer<br \/>ejecuta:<\/p>\n\n\n\n<p class=\"has-text-align-left\">func main() {<br \/>i := 1<br \/>defer logNum(i) \/\/ deferred function call: logNum(1)<br \/>fmt.Println(\u00abFirst main statement\u00bb)<br \/>i++<br \/>defer logNum(i) \/\/ deferred function call: logNum(2)<br \/>defer logNum(i*i) \/\/ deferred function call: logNum(4)<br \/>return \/\/ explicit return<br \/>}<br \/>func logNum(i int) {<br \/>fmt.Printf(\u00abNum %d\\n\u00bb, i)<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<br \/>Salida:<br \/>First main statement<br \/>Num 4<br \/>Num 2<br \/>Num 1<br \/>Si una funci\u00f3n ha nombrado valores de retorno, una funci\u00f3n an\u00f3nima diferida dentro de esa<br \/>funci\u00f3n puede acceder y actualizar el valor devuelto incluso despu\u00e9s de que la funci\u00f3n haya<br \/>regresado:<\/p>\n\n\n\n<p class=\"has-text-align-left\">func main() {<br \/>fmt.Println(plusOne(1)) \/\/ 2<br \/>return<br \/>}<br \/>func plusOne(i int) (result int) { \/\/ overkill! only for demonstration<br \/>defer func() {result += 1}() \/\/ anonymous function must be called by adding ()<br \/>\/\/ i is returned as result, which is updated by deferred function above<br \/>\/\/ after execution of below return<br \/>return i<br \/>}<\/p>\n\n\n\n<p class=\"has-text-align-left\">Finalmente, una sentencia de defer generalmente se usa en operaciones que a menudo ocurren<br \/>juntas Por ejemplo:<br \/>\u2022 abrir y cerrar un archivo<br \/>\u2022 conectar y desconectar<br \/>\u2022 bloquear y desbloquear un mutex<br \/>\u2022 marcar un grupo de espera como hecho ( defer wg.Done() )<br \/>Este uso garantiza la liberaci\u00f3n adecuada de los recursos del sistema independientemente del<br \/>flujo de ejecuci\u00f3n.<br \/>resp, err := http.Get(url)<br \/>if err != nil {<br \/>return err<br \/>}<br \/>defer resp.Body.Close() \/\/ Body will always get closed<\/p>\n\n\n\n<p class=\"has-text-align-left\">Llamadas de funci\u00f3n diferida<br \/>Las llamadas a funciones diferidas tienen un prop\u00f3sito similar a cosas como los bloques finally<br \/>en lenguajes como Java: aseguran que alguna funci\u00f3n se ejecutar\u00e1 cuando se devuelva la<br \/>funci\u00f3n externa, independientemente de si se produjo un error o qu\u00e9 declaraci\u00f3n de devoluci\u00f3n se<br \/>golpe\u00f3 en casos con m\u00faltiples devoluciones. Esto es \u00fatil para limpiar recursos que deben cerrarse<br \/>como conexiones de red o punteros de archivos. La palabra clave defer indica una llamada a<br \/>funci\u00f3n diferida, de manera similar a la palabra clave go inicia una nueva goroutina. Al igual que<\/p>\n\n\n\n<p class=\"has-text-align-left\">una llamada go , los argumentos de la funci\u00f3n se eval\u00faan inmediatamente, pero a diferencia de la<br \/>llamada go , las funciones diferidas no se ejecutan simult\u00e1neamente.<br \/>func MyFunc() {<br \/>conn := GetConnection()<br \/>\/\/ Some kind of connection that must be closed.<br \/>defer conn.Close()<br \/>\/\/ Will be executed when MyFunc returns, regardless of how.<br \/>\/\/ Do some things\u2026<br \/>if someCondition {<br \/>return<br \/>\/\/ conn.Close() will be called<br \/>}<br \/>\/\/ Do more things<br \/>}\/\/ Implicit return &#8211; conn.Close() will still be called<br \/>Tenga en cuenta el uso de conn.Close() lugar de conn.Close : no solo est\u00e1 pasando una funci\u00f3n,<br \/>est\u00e1 aplazando una llamada de funci\u00f3n completa, incluidos sus argumentos. Las m\u00faltiples<br \/>llamadas de funci\u00f3n se pueden diferir en la misma funci\u00f3n externa, y cada una se ejecutar\u00e1 una<br \/>vez en orden inverso. Tambi\u00e9n puede aplazar los cierres, \u00a1no se olvide de los parens!<br \/>defer func(){<br \/>\/\/ Do some cleanup<br \/>}()<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"has-text-align-left\">Archivo I \/ O<br \/>Sintaxis<\/p>\n\n\n\n<p class=\"has-text-align-left\">\u2022 archivo, err: = os.Open ( nombre ) \/\/ Abre un archivo en modo de solo lectura. Se devuelve<br \/>un error no nulo si no se pudo abrir el archivo.<br \/>\u2022 archivo, err: = os.Create ( nombre ) \/\/ Crea o abre un archivo si ya existe en modo de solo<br \/>escritura. El archivo se sobrescribe si ya existe. Se devuelve un error no nulo si no se pudo<br \/>abrir el archivo.<br \/>\u2022 file, err: = os.OpenFile ( name , flags , perm ) \/\/ Abre un archivo en el modo especificado por<br \/>las banderas. Se devuelve un error no nulo si no se pudo abrir el archivo.<br \/>\u2022 data, err: = ioutil.ReadFile ( name ) \/\/ Lee todo el archivo y lo devuelve. Se devuelve un error<br \/>no nulo si no se pudo leer el archivo completo.<br \/>\u2022 err: = ioutil.WriteFile ( name , data , perm ) \/\/ Crea o sobrescribe un archivo con los datos<br \/>proporcionados y los bits de permiso de UNIX. Se devuelve un error no nulo si el archivo no<br \/>se pudo escribir.<br \/>\u2022 err: = os.Remove ( name ) \/\/ Borra un archivo. Se devuelve un error no nulo si el archivo no<br \/>se pudo eliminar.<br \/>\u2022 err: = os.RemoveAll ( name ) \/\/ Borra un archivo o toda la jerarqu\u00eda de directorios. Se<br \/>devuelve un error no nulo si no se pudo eliminar el archivo o directorio.<br \/>\u2022 err: = os.Rename ( oldName , newName ) \/\/ Renombra o mueve un archivo (puede ser a<br \/>trav\u00e9s de directorios). Se devuelve un error no nulo si el archivo no se pudo mover.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Leer y escribir en un archivo usando ioutil.<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Un programa simple que escribe \u00ab\u00a1Hola mundo!\u00bb to test.txt , lee los datos y los imprime.<br \/>Demuestra operaciones simples de E \/ S de archivos.<\/p>\n\n\n\n<p class=\"has-text-align-left\">package main<br \/>import (<br \/>\u00abfmt\u00bb<br \/>\u00abio\/ioutil\u00bb<br \/>)<br \/>func main() {<br \/>hello := []byte(\u00abHello, world!\u00bb)<br \/>\/\/ Write <code>Hello, world!<\/code> to test.txt that can read\/written by user and read by others<br \/>err := ioutil.WriteFile(\u00abtest.txt\u00bb, hello, 0644)<br \/>if err != nil {<br \/>panic(err)<br \/>}<br \/>\/\/ Read test.txt<br \/>data, err := ioutil.ReadFile(\u00abtest.txt\u00bb)<br \/>if err != nil {<br \/>panic(err)<br \/>}<br \/>\/\/ Should output: <code>The file contains: Hello, world!<\/code><br \/>fmt.Println(\u00abThe file contains: \u00bb + string(data))<br \/>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Listado de todos los archivos y carpetas en el directorio actual.<\/h2>\n\n\n\n<p class=\"has-text-align-left\">package main<br \/>import (<br \/>\u00abfmt\u00bb<br \/>\u00abio\/ioutil\u00bb<br \/>)<br \/>func main() {<br \/>files, err := ioutil.ReadDir(\u00ab.\u00bb)<br \/>if err != nil {<br \/>panic(err)<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<br \/>fmt.Println(\u00abFiles and folders in the current directory:\u00bb)<br \/>for _, fileInfo := range files {<br \/>fmt.Println(fileInfo.Name())<br \/>}<br \/>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Listado de todas las carpetas en el directorio actual<\/h2>\n\n\n\n<p class=\"has-text-align-left\">package main<br \/>import (<br \/>\u00abfmt\u00bb<br \/>\u00abio\/ioutil\u00bb<br \/>)<br \/>func main() {<br \/>files, err := ioutil.ReadDir(\u00ab.\u00bb)<br \/>if err != nil {<br \/>panic(err)<br \/>}<br \/>fmt.Println(\u00abFolders in the current directory:\u00bb)<br \/>for _, fileInfo := range files {<br \/>if fileInfo.IsDir() {<br \/>fmt.Println(fileInfo.Name())<br \/>}<br \/>}<br \/>}<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/xn--nicols-tta.es\/wp-content\/uploads\/2022\/07\/gopher.jpg\" alt=\"\" class=\"wp-image-7888\" \/><figcaption class=\"wp-element-caption\">Golang<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Arrays<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Introducci\u00f3n<br \/>Las matrices son tipos de datos espec\u00edficos, que representan una colecci\u00f3n ordenada de<br \/>elementos de otro tipo.<br \/>En Go, los arreglos pueden ser simples (a veces llamados \u00ablistas\u00bb) o multidimensionales (como,<br \/>por ejemplo, un arreglo en 2 dimensiones representa un conjunto ordenado de arreglos, que<br \/>contiene elementos)<br \/>Sintaxis<br \/>\u2022 var variableName [5] ArrayType \/\/ Declarar una matriz de tama\u00f1o 5.<br \/>var variableName [2] [3] ArrayType = {{Value1, Value2, Value3}, {Value4, Value5, Value6}} \/\/<br \/>Declarar una matriz multidimensional<br \/>\u2022<br \/>variableName: = [\u2026] ArrayType {Value1, Value2, Value3} \/\/ Declarar una matriz de tama\u00f1o 3<br \/>(El compilador contar\u00e1 los elementos de la matriz para definir el tama\u00f1o)<br \/>\u2022<br \/>\u2022 arrayName [2] \/\/ Obteniendo el valor por \u00edndice.<br \/>\u2022 arrayName [5] = 0 \/\/ Estableciendo el valor en el \u00edndice.<br \/>\u2022 arrayName [0] \/\/ Primer valor de la matriz<br \/>\u2022 arrayName [len (arrayName) -1] \/\/ \u00daltimo valor de la matriz<br \/>Examples<br \/>Creando matrices<br \/>Una matriz en go es una colecci\u00f3n ordenada de elementos del mismo tipo.<br \/>La notaci\u00f3n b\u00e1sica para representar arrays es usar [] con el nombre de la variable.<br \/>Crear una nueva matriz se parece a var array = [size]Type , reemplazando size por un n\u00famero<br \/>(por ejemplo, 42 para especificar que ser\u00e1 una lista de 42 elementos), y reemplazando Type por el<br \/>tipo de elementos que la matriz puede contener (para ejemplo int o string )<br \/>Justo debajo, hay un ejemplo de c\u00f3digo que muestra la forma diferente de crear una matriz en<br \/>Go.<br \/>\/\/ Creating arrays of 6 elements of type int,<br \/>\/\/ and put elements 1, 2, 3, 4, 5 and 6 inside it, in this exact order:<br \/>var array1 [6]int = [6]int {1, 2, 3, 4, 5, 6} \/\/ classical way<br \/>var array2 = [6]int {1, 2, 3, 4, 5, 6} \/\/ a less verbose way<br \/>var array3 = [\u2026]int {1, 2, 3, 4, 5, 6} \/\/ the compiler will count the array elements by<br \/>itself<br \/>fmt.Println(\u00abarray1:\u00bb, array1) \/\/ &gt; [1 2 3 4 5 6]<br \/>fmt.Println(\u00abarray2:\u00bb, array2) \/\/ &gt; [1 2 3 4 5 6]<br \/>fmt.Println(\u00abarray3:\u00bb, array3) \/\/ &gt; [1 2 3 4 5 6]<\/p>\n\n\n\n<p class=\"has-text-align-left\">\/\/ Creating arrays with default values inside: zeros := [8]int{} \/\/ Create a list of 8 int filled with 0 ptrs := [8]*int{} \/\/ a list of int pointers, filled with 8 nil references ( ) emptystr := [8]string{} \/\/ a list of string filled with 8 times \u00ab\u00bb fmt.Println(\u00abzeroes:\u00bb, zeros) \/\/ &gt; [0 0 0 0 0 0 0 0] fmt.Println(\u00abptrs:\u00bb, ptrs) \/\/ &gt; [ ] fmt.Println(\u00abemptystr:\u00bb, emptystr) \/\/ &gt; [ ] \/\/ <\/p>\n\n\n\n<p class=\"has-text-align-left\">values are empty strings, separated by spaces, \/\/ so we can just see separating spaces \/\/ Arrays are also working with a personalized type type Data struct { Number int Text string } \/\/ Creating an array with 8 &#8216;Data&#8217; elements \/\/ All the 8 elements will be like {0, \u00ab\u00bb} (Number = 0, Text = \u00ab\u00bb) structs := [8]Data{} fmt.Println(\u00abstructs:\u00bb, structs) \/\/ &gt; [{0 } {0 } {0 } {0 } {0 } {0 } {0 } {0 }] \/\/ prints {0 } because Number are 0 and Text are empty; separated by a space jugar en el patio de recreo Array Multidimensional Las matrices multidimensionales son b\u00e1sicamente matrices que contienen otras matrices como elementos. Se representa como el tipo [sizeDim1][sizeDim2]..[sizeLastDim]type , reemplazando sizeDim por n\u00fameros correspondientes a la longitud de la dimensi\u00f3n, y type por el tipo de datos en la matriz multidimensional.<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Por ejemplo, [2][3]int representa una matriz compuesta de 2 subrays de 3 elementos tipeados int . B\u00e1sicamente puede ser la representaci\u00f3n de una matriz de 2 l\u00edneas y 3 columnas . Por lo tanto, podemos hacer una matriz num\u00e9rica de grandes dimensiones como var values := [2017][12][31][24][60]int por ejemplo, si necesita almacenar un n\u00famero por cada minuto desde el a\u00f1o 0. <\/p>\n\n\n\n<p class=\"has-text-align-left\">Para acceder a este tipo de matriz, para el \u00faltimo ejemplo, buscando el valor de 2016-01-31 a las 19:42, tendr\u00e1 acceso a los values[2016][0][30][19][42] (porque los \u00edndices de matriz comienza a 0 y no a 1 como d\u00edas y meses) Algunos ejemplos siguientes: \/\/ Defining a 2d Array to represent a matrix like \/\/ 1 2 3 So with 2 lines and 3 columns;<\/p>\n\n\n\n<p class=\"has-text-align-left\">\/\/ 4 5 6<br \/>var multiDimArray := [2\/<em>lines<\/em>\/][3\/<em>columns<\/em>\/]int{ [3]int{1, 2, 3}, [3]int{4, 5, 6} }<br \/>\/\/ That can be simplified like this:<br \/>var simplified := [2][3]int{{1, 2, 3}, {4, 5, 6}}<br \/>\/\/ What does it looks like ?<br \/>fmt.Println(multiDimArray)<br \/>\/\/ &gt; [[1 2 3] [4 5 6]]<br \/>fmt.Println(multiDimArray[0])<br \/>\/\/ &gt; [1 2 3] (first line of the array)<br \/>fmt.Println(multiDimArray[0][1])<br \/>\/\/ &gt; 2 (cell of line 0 (the first one), column 1 (the 2nd one))<br \/>\/\/ We can also define array with as much dimensions as we need<br \/>\/\/ here, initialized with all zeros<br \/>var multiDimArray := [2][4][3][2]string{}<br \/>fmt.Println(multiDimArray);<br \/>\/\/ Yeah, many dimensions stores many data<br \/>\/\/ &gt; [[[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]]<br \/>\/\/ [[[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]]<br \/>\/\/ We can set some values in the array&#8217;s cells<br \/>multiDimArray[0][0][0][0] := \u00abAll zero indexes\u00bb \/\/ Setting the first value<br \/>multiDimArray[1][3][2][1] := \u00abAll indexes to max\u00bb \/\/ Setting the value at extreme location<br \/>fmt.Println(multiDimArray);<br \/>\/\/ If we could see in 4 dimensions, maybe we could see the result as a simple format<br \/>\/\/ &gt; [[[[\u00abAll zero indexes\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]]<br \/>\/\/ [[[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]]]<br \/>\/\/ [[[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00ab\u00bb]] [[\u00ab\u00bb \u00ab\u00bb] [\u00ab\u00bb \u00abAll indexes to max\u00bb]]]]<br \/>\u00cdndices de matriz<br \/>Se debe acceder a los valores de las matrices utilizando un n\u00famero que especifique la ubicaci\u00f3n<br \/>del valor deseado en la matriz. Este n\u00famero se llama \u00edndice.<br \/>Los \u00edndices comienzan en 0 y terminan en longitud de matriz -1 .<br \/>Para acceder a un valor, debe hacer algo como esto: arrayName[index] , reemplazando \u00ab\u00edndice\u00bb por<br \/>el n\u00famero correspondiente al rango del valor en su matriz.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Por ejemplo:<br \/>var array = [6]int {1, 2, 3, 4, 5, 6}<br \/>fmt.Println(array[-42]) \/\/ invalid array index -1 (index must be non-negative)<br \/>fmt.Println(array[-1]) \/\/ invalid array index -1 (index must be non-negative)<br \/>fmt.Println(array[0]) \/\/ &gt; 1<br \/>fmt.Println(array[1]) \/\/ &gt; 2<br \/>fmt.Println(array[2]) \/\/ &gt; 3<br \/>fmt.Println(array[3]) \/\/ &gt; 4<br \/>fmt.Println(array[4]) \/\/ &gt; 5<br \/>fmt.Println(array[5]) \/\/ &gt; 6<br \/>fmt.Println(array[6]) \/\/ invalid array index 6 (out of bounds for 6-element array)<br \/>fmt.Println(array[42]) \/\/ invalid array index 42 (out of bounds for 6-element array)<br \/>Para establecer o modificar un valor en la matriz, la forma es la misma.<br \/>Ejemplo:<br \/>var array = [6]int {1, 2, 3, 4, 5, 6}<br \/>fmt.Println(array) \/\/ &gt; [1 2 3 4 5 6]<br \/>array[0] := 6<br \/>fmt.Println(array) \/\/ &gt; [6 2 3 4 5 6]<br \/>array[1] := 5<br \/>fmt.Println(array) \/\/ &gt; [6 5 3 4 5 6]<br \/>array[2] := 4<br \/>fmt.Println(array) \/\/ &gt; [6 5 4 4 5 6]<br \/>array[3] := 3<br \/>fmt.Println(array) \/\/ &gt; [6 5 4 3 5 6]<br \/>array[4] := 2<br \/>fmt.Println(array) \/\/ &gt; [6 5 4 3 2 6]<br \/>array[5] := 1<br \/>fmt.Println(array) \/\/ &gt; [6 5 4 3 2 1]<br \/>Lea Arrays en l\u00ednea: https:\/\/riptutorial.com\/es\/go\/topic\/390\/arrays<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Autorizaci\u00f3n JWT en G<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Introducci\u00f3n<br \/>Los tokens web de JSON (JWT) son un m\u00e9todo popular para representar reclamos de forma<br \/>segura entre dos partes. Comprender c\u00f3mo trabajar con ellos es importante al desarrollar<br \/>aplicaciones web o interfaces de programaci\u00f3n de aplicaciones.<br \/>Observaciones<br \/>context.Context y HTTP middleware est\u00e1n fuera del alcance de este tema, pero no obstante, esas<br \/>almas curiosas y errantes deber\u00edan consultar https:\/\/github.com\/goware\/jwtauth ,<br \/>https:\/\/github.com\/auth0\/go-jwt- middleware , y https:\/\/github.com\/dgrijalva\/jwt-go .<br \/>Grandes felicitaciones a Dave Grijalva por su incre\u00edble trabajo en go-jwt.<br \/>Examples<br \/>Analizar y validar un token utilizando el m\u00e9todo de firma HMAC<br \/>\/\/ sample token string taken from the New example<br \/>tokenString :=<br \/>\u00abeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58BrZk-bh7vLiRIsrpU\u00bb<br \/>\/\/ Parse takes the token string and a function for looking up the key. The latter is<br \/>especially<br \/>\/\/ useful if you use multiple keys for your application. The standard is to use &#8216;kid&#8217; in the<br \/>\/\/ head of the token to identify which key to use, but the parsed token (head and claims) is<br \/>provided<br \/>\/\/ to the callback, providing flexibility.<br \/>token, err := jwt.Parse(tokenString, func(token <em>jwt.Token) (interface{}, error) { \/\/ Don&#8217;t forget to validate the alg is what you expect: if _, ok := token.Method.(<\/em>jwt.SigningMethodHMAC); !ok {<br \/>return nil, fmt.Errorf(\u00abUnexpected signing method: %v\u00bb, token.Header[\u00abalg\u00bb])<br \/>}<br \/>\/\/ hmacSampleSecret is a []byte containing your secret, e.g. []byte(\u00abmy_secret_key\u00bb)<br \/>return hmacSampleSecret, nil<br \/>})<br \/>if claims, ok := token.Claims.(jwt.MapClaims); ok &amp;&amp; token.Valid {<br \/>fmt.Println(claims[\u00abfoo\u00bb], claims[\u00abnbf\u00bb])<br \/>} else {<br \/>fmt.Println(err)<br \/>}<br \/>Salida:<br \/>bar 1.4444784e+09<\/p>\n\n\n\n<p class=\"has-text-align-left\">(De la documentaci\u00f3n , cortes\u00eda de Dave Grijalva.) Creaci\u00f3n de un token utilizando un tipo de notificaciones personalizado El StandardClaim est\u00e1 integrado en el tipo personalizado para permitir la f\u00e1cil codificaci\u00f3n, an\u00e1lisis y validaci\u00f3n de las reclamaciones est\u00e1ndar. <\/p>\n\n\n\n<p class=\"has-text-align-left\">tokenString := \u00abeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c\u00bb type MyCustomClaims struct { Foo string `json:\u00bbfoo\u00bb` jwt.StandardClaims } \/\/ sample token is expired. override time so it parses as valid at(time.Unix(0, 0), func() { token, err := jwt.ParseWithClaims(tokenString, &amp;MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) { return []byte(\u00abAllYourBase\u00bb), nil }) if claims, ok := token.Claims.(*MyCustomClaims); ok &amp;&amp; token.Valid { fmt.Printf(\u00ab%v %v\u00bb, claims.Foo, claims.StandardClaims.ExpiresAt) } else { fmt.Println(err) } }) Salida: bar 15000<\/p>\n\n\n\n<p class=\"has-text-align-left\"> (De la documentaci\u00f3n , cortes\u00eda de Dave Grijalva.) Creaci\u00f3n, firma y codificaci\u00f3n de un token JWT utilizando el m\u00e9todo de firma HMAC \/\/ Create a new token object, specifying signing method and the claims \/\/ you would like it to contain. token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ \u00abfoo\u00bb: \u00abbar\u00bb, \u00abnbf\u00bb: time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(), }) \/\/ Sign and get the complete encoded token as a string using the secret tokenString, err := token.SignedString(hmacSampleSecret) fmt.Println(tokenString, err) Salida: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58Br<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Zk-bh7vLiRIsrpU (De la documentaci\u00f3n , cortes\u00eda de Dave Grijalva.)<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Usando el tipo StandardClaims por s\u00ed mismo para analizar un token El tipo StandardClaims est\u00e1 dise\u00f1ado para ser integrado en sus tipos personalizados para proporcionar caracter\u00edsticas de validaci\u00f3n est\u00e1ndar.<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Puede usarlo solo, pero no hay forma de recuperar otros campos despu\u00e9s de analizar. <\/p>\n\n\n\n<p class=\"has-text-align-left\">Vea el ejemplo de reclamos personalizados para el uso previsto.<\/p>\n\n\n\n<p class=\"has-text-align-left\"> mySigningKey := []byte(\u00abAllYourBase\u00bb)<\/p>\n\n\n\n<p class=\"has-text-align-left\"> \/\/ Create the Claims claims := &amp;jwt.StandardClaims{ ExpiresAt: 15000, Issuer: \u00abtest\u00bb, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) ss, err := token.SignedString(mySigningKey) fmt.Printf(\u00ab%v %v\u00bb, ss, err) Salida: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.QsODzZu3lUZMVdhbO76u3Jv02iYCvEHcYVUI1kOWEU0 (De la documentaci\u00f3n , cortes\u00eda de Dave Grijalva.) Analizar los tipos de error usando cheques de campo de bits \/\/ Token from another example. This token is expired var tokenString = \u00abeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c\u00bb token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte(\u00abAllYourBase\u00bb), nil }) if token.Valid { fmt.Println(\u00abYou look nice today\u00bb) } else if ve, ok := err.(*jwt.ValidationError); <\/p>\n\n\n\n<p class=\"has-text-align-left\">ok { if ve.Errors&amp;jwt.ValidationErrorMalformed != 0 { fmt.Println(\u00abThat&#8217;s not even a token\u00bb) } else if ve.Errors&amp;(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 { \/\/ Token is either expired or not active yet fmt.Println(\u00abTiming is everything\u00bb) } else { fmt.Println(\u00abCouldn&#8217;t handle this token:\u00bb, err) } } else { fmt.Println(\u00abCouldn&#8217;t handle this token:\u00bb, err) https:\/\/riptutorial.com\/es\/home 26 } Salida: Timing is everything (De la documentaci\u00f3n , cortes\u00eda de Dave Grijalva.) <\/p>\n\n\n\n<p class=\"has-text-align-left\">Obteniendo el token del encabezado de autorizaci\u00f3n HTTP type contextKey string const ( \/\/ JWTTokenContextKey holds the key used to store a JWT Token in the \/\/ context. JWTTokenContextKey contextKey = \u00abJWTToken\u00bb \/\/ JWTClaimsContextKey holds the key used to store the JWT Claims in the \/\/ context. JWTClaimsContextKey contextKey = \u00abJWTClaims\u00bb ) \/\/ ToHTTPContext moves JWT token from request header to context. func ToHTTPContext() http.RequestFunc { return func(ctx context.Context, r *stdhttp.Request) context.Context { token, ok := extractTokenFromAuthHeader(r.Header.Get(\u00abAuthorization\u00bb)) if !ok { return ctx } return context.WithValue(ctx, JWTTokenContextKey, token) } }<\/p>\n\n\n\n<p class=\"has-text-align-left\"> (De go-kit \/ kit , cortes\u00eda de Peter Bourgon) <\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Bucles<\/h2>\n\n\n\n<p>Introducci\u00f3n <\/p>\n\n\n\n<p class=\"has-text-align-left\">Como una de las funciones m\u00e1s b\u00e1sicas de la programaci\u00f3n, los bucles son una pieza importante para casi todos los lenguajes de programaci\u00f3n. Los bucles permiten a los desarrolladores configurar ciertas partes de su c\u00f3digo para que se repitan a trav\u00e9s de una serie de bucles que se conocen como iteraciones. Este tema cubre el uso de varios tipos de bucles y aplicaciones de bucles en Go. <\/p>\n\n\n\n<p>Examples<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Lazo basico<\/p>\n\n\n\n<p class=\"has-text-align-left\"> for es la \u00fanica sentencia de bucle en marcha, por lo que una implementaci\u00f3n b\u00e1sica de bucle podr\u00eda tener este aspecto:<\/p>\n\n\n\n<p class=\"has-text-align-left\"> \/\/ like if, for doesn&#8217;t use parens either. \/\/ variables declared in for and if are local to their scope. for x := 0; x &lt; 3; x++ { \/\/ ++ is a statement. fmt.Println(\u00abiteration\u00bb, x) } \/\/ would print: \/\/ iteration 0 \/\/ iteration 1 \/\/ iteration 2 <\/p>\n\n\n\n<p class=\"has-text-align-left\">Romper y continuar <\/p>\n\n\n\n<p>Salir del bucle y continuar a la siguiente iteraci\u00f3n tambi\u00e9n se admite en Go, como en muchos otros idiomas: <\/p>\n\n\n\n<p>for x := 0; x &lt; 10; x++ { \/\/ loop through 0 to 9 if x &lt; 3 { \/\/ skips all the numbers before 3 continue } if x &gt; 5 { \/\/ breaks out of the loop once x == 6 break } fmt.Println(\u00abiteration\u00bb, x) } \/\/ would print: \/\/ iteration 3 \/\/ iteration 4 \/\/ iteration 5<\/p>\n\n\n\n<p> Las declaraciones break y continue adem\u00e1s aceptan una etiqueta opcional, que se utiliza para<\/p>\n\n\n\n<p class=\"has-text-align-left\">identificar los bucles externos para apuntar con la declaraci\u00f3n:<\/p>\n\n\n\n<p class=\"has-text-align-left\"> OuterLoop: for { for { if allDone() { break OuterLoop } if innerDone() { continue OuterLoop } \/\/ do something } }<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Bucle condicional<\/p>\n\n\n\n<p class=\"has-text-align-left\"> La palabra clave for tambi\u00e9n se usa para los bucles condicionales, tradicionalmente while bucles en otros lenguajes de programaci\u00f3n. <\/p>\n\n\n\n<p class=\"has-text-align-left\">package main import ( \u00abfmt\u00bb ) func main() { i := 0 for i &lt; 3 { \/\/ Will repeat if condition is true i++ fmt.Println(i) } } <\/p>\n\n\n\n<p class=\"has-text-align-left\"> Saldr\u00e1: 1 2 3<\/p>\n\n\n\n<p class=\"has-text-align-left\"> Bucle infinito:<\/p>\n\n\n\n<p class=\"has-text-align-left\"> for { \/\/ This will run until a return or break. } <\/p>\n\n\n\n<p class=\"has-text-align-left\">Diferentes formas de For Loop <\/p>\n\n\n\n<p class=\"has-text-align-left\">Forma simple utilizando una variable: <\/p>\n\n\n\n<p class=\"has-text-align-left\">for i := 0; i &lt; 10; i++ {<\/p>\n\n\n\n<p class=\"has-text-align-left\">fmt.Print(i, \u00bb \u00ab)<br \/>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Usando dos variables (o m\u00e1s):<\/h2>\n\n\n\n<p class=\"has-text-align-left\">for i, j := 0, 0; i &lt; 5 &amp;&amp; j &lt; 10; i, j = i+1, j+2 { fmt.Println(i, j) }<\/p>\n\n\n\n<p class=\"has-text-align-left\">Etc,etc,&#8230;<\/p>\n\n\n\n<p class=\"has-text-align-left\">Y mucho m\u00e1s &#8230;<\/p>\n\n\n\n<p class=\"has-text-align-left\">Puedes ver el Documento entero Pinchando<a href=\"https:\/\/nicol\u00e1s.es\/producto\/aprendizaje-go-en-pdf\/\"> Aqui<\/a><a href=\"https:\/\/xn--nicols-tta.es\/enlaces-entradas\/go-es.pdf\">.<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p class=\"has-text-align-left\"><strong>\u00a1Cu\u00e9ntame en los comentarios!<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p class=\"has-text-align-left\"><strong>Enlaces internos:<\/strong><\/p>\n\n\n\n<h5 class=\"wp-block-heading has-text-align-left\"><a href=\"https:\/\/xn--nicols-tta.es\/nicolas_noticias\/\">\u00daltimas Noticias Digitales<\/a><\/h5>\n\n\n\n<h5 class=\"wp-block-heading has-text-align-left\"><a href=\"https:\/\/xn--nicols-tta.es\/blog\/\">Blog<\/a><\/h5>\n\n\n\n<h5 class=\"wp-block-heading has-text-align-left\"><a href=\"https:\/\/xn--nicols-tta.es\/tienda\/\">Tienda<\/a><\/h5>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-left\">S\u00ed, te ha Gustado.<\/h4>\n\n\n\n<p class=\"has-text-align-left\"><strong>\u00a1Cu\u00e9ntame en los comentarios!<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\"><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n de<br \/>\nAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,<br \/>\nfunciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.<\/p>\n","protected":false},"author":4,"featured_media":7888,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48,47,40],"tags":[42],"class_list":["post-7921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cursos","category-golang","category-programacion-informatica","tag-golang"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>APRENDIZAJE GO - Vista Previa %<\/title>\n<meta name=\"description\" content=\"Go es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"APRENDIZAJE GO\" \/>\n<meta property=\"og:description\" content=\"ObservacionesGo es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/\" \/>\n<meta property=\"og:site_name\" content=\"Vista Previa\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-12T11:01:46+00:00\" \/>\n<meta name=\"author\" content=\"Nicol\u00e1s\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"APRENDIZAJE GO\" \/>\n<meta name=\"twitter:description\" content=\"ObservacionesGo es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicol\u00e1s\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/\"},\"author\":{\"name\":\"Nicol\u00e1s\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#\\\/schema\\\/person\\\/25f4a9fc1df1ccf47b26f0627129af16\"},\"headline\":\"APRENDIZAJE GO\",\"datePublished\":\"2022-08-12T11:01:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/\"},\"wordCount\":3638,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"keywords\":[\"Golang\"],\"articleSection\":[\"Cursos\",\"Golang\",\"Programaci\u00f3n Inform\u00e1tica\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/\",\"url\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/\",\"name\":\"APRENDIZAJE GO - Vista Previa %\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"datePublished\":\"2022-08-12T11:01:46+00:00\",\"description\":\"Go es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#primaryimage\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/2022\\\/08\\\/12\\\/aprendizaje-go\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"APRENDIZAJE GO\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#website\",\"url\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/\",\"name\":\"Vista Previa\",\"description\":\"TEMAS WORDPRESS\",\"publisher\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#organization\",\"name\":\"Vista Previa\",\"url\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/cropped-nicolas-N-tramp.png\",\"contentUrl\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/cropped-nicolas-N-tramp.png\",\"width\":512,\"height\":512,\"caption\":\"Vista Previa\"},\"image\":{\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/#\\\/schema\\\/person\\\/25f4a9fc1df1ccf47b26f0627129af16\",\"name\":\"Nicol\u00e1s\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/48545c1514fac5b21237f4433c348f809cf3e3c7b57718d11af0b047c3a59094?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/48545c1514fac5b21237f4433c348f809cf3e3c7b57718d11af0b047c3a59094?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/48545c1514fac5b21237f4433c348f809cf3e3c7b57718d11af0b047c3a59094?s=96&d=mm&r=g\",\"caption\":\"Nicol\u00e1s\"},\"url\":\"https:\\\/\\\/xn--nicols-tta.es\\\/wordpress\\\/multisite\\\/temas\\\/blog\\\/author\\\/nicolas\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"APRENDIZAJE GO - Vista Previa %","description":"Go es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/","og_locale":"es_ES","og_type":"article","og_title":"APRENDIZAJE GO","og_description":"ObservacionesGo es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.","og_url":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/","og_site_name":"Vista Previa","article_published_time":"2022-08-12T11:01:46+00:00","author":"Nicol\u00e1s","twitter_card":"summary_large_image","twitter_title":"APRENDIZAJE GO","twitter_description":"ObservacionesGo es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.","twitter_misc":{"Escrito por":"Nicol\u00e1s","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#article","isPartOf":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/"},"author":{"name":"Nicol\u00e1s","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#\/schema\/person\/25f4a9fc1df1ccf47b26f0627129af16"},"headline":"APRENDIZAJE GO","datePublished":"2022-08-12T11:01:46+00:00","mainEntityOfPage":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/"},"wordCount":3638,"commentCount":0,"publisher":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#organization"},"image":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#primaryimage"},"thumbnailUrl":"","keywords":["Golang"],"articleSection":["Cursos","Golang","Programaci\u00f3n Inform\u00e1tica"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/","url":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/","name":"APRENDIZAJE GO - Vista Previa %","isPartOf":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#website"},"primaryImageOfPage":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#primaryimage"},"image":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#primaryimage"},"thumbnailUrl":"","datePublished":"2022-08-12T11:01:46+00:00","description":"Go es un lenguaje de c\u00f3digo abierto, compilado y tipificado est\u00e1ticamente seg\u00fan la tradici\u00f3n deAlgol y C. Cuenta con caracter\u00edsticas como recolecci\u00f3n de basura, tipificaci\u00f3n estructural limitada,funciones de seguridad de la memoria y programaci\u00f3n concurrente de estilo CSP f\u00e1cil de usar.","breadcrumb":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/2022\/08\/12\/aprendizaje-go\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/"},{"@type":"ListItem","position":2,"name":"APRENDIZAJE GO"}]},{"@type":"WebSite","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#website","url":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/","name":"Vista Previa","description":"TEMAS WORDPRESS","publisher":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#organization","name":"Vista Previa","url":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#\/schema\/logo\/image\/","url":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-content\/uploads\/2021\/10\/cropped-nicolas-N-tramp.png","contentUrl":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-content\/uploads\/2021\/10\/cropped-nicolas-N-tramp.png","width":512,"height":512,"caption":"Vista Previa"},"image":{"@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/#\/schema\/person\/25f4a9fc1df1ccf47b26f0627129af16","name":"Nicol\u00e1s","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/48545c1514fac5b21237f4433c348f809cf3e3c7b57718d11af0b047c3a59094?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/48545c1514fac5b21237f4433c348f809cf3e3c7b57718d11af0b047c3a59094?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/48545c1514fac5b21237f4433c348f809cf3e3c7b57718d11af0b047c3a59094?s=96&d=mm&r=g","caption":"Nicol\u00e1s"},"url":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/blog\/author\/nicolas\/"}]}},"_links":{"self":[{"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/posts\/7921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/comments?post=7921"}],"version-history":[{"count":0,"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/posts\/7921\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/media?parent=7921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/categories?post=7921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xn--nicols-tta.es\/wordpress\/multisite\/temas\/wp-json\/wp\/v2\/tags?post=7921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}