<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Golang · DacaCode &lt;/&gt;</title><link>https://blog.dacadev.com/categories/golang/</link><description>Blog de tecnología, programación y electrónica, para compartir conocimientos, experiencias y tutoriales con este apasionante mundo.</description><generator>Hugo</generator><language>es-CO</language><copyright>Copyright © 2026 DacaDev. All rights reserved.</copyright><lastBuildDate>Sun, 09 Jun 2024 00:00:00 -0500</lastBuildDate><atom:link href="https://blog.dacadev.com/categories/golang/index.xml" rel="self" type="application/rss+xml"/><image><url>https://blog.dacadev.com/images/blog-logo.png</url><title>DacaCode &lt;/&gt;</title><link>https://blog.dacadev.com/</link></image><item><title>Constantes en Go y conceptos clave</title><link>https://blog.dacadev.com/golang/constants/</link><pubDate>Sun, 09 Jun 2024 00:00:00 -0500</pubDate><guid>https://blog.dacadev.com/golang/constants/</guid><dc:creator>Dacadev</dc:creator><category>golang</category><description>Descubre cómo declarar y utilizar constantes en Go para mejorar el rendimiento de tu código. Aprende sobre tipos de constantes, pseudo-enumerados y la poderosa herramienta 'iota' en Golang.</description><media:content url="https://blog.dacadev.com/images/golang/constants/banner.png" medium="image" type="image/png"/><content:encoded>
&lt;details class="table-of-content "&gt;
 &lt;summary&gt;
 
 Tabla de Contenido
 
 &lt;/summary&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#constantes-en-go"&gt;Constantes en Go&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#declaración-de-constantes"&gt;Declaración de constantes&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#conceptos-clave-de-las-constantes"&gt;Conceptos clave de las Constantes&lt;/a&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#kind-vs-type"&gt;Kind vs Type&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#pseudo-enumerados"&gt;Pseudo-enumerados&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#iota"&gt;iota&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/li&gt;
 &lt;/ol&gt;
&lt;/nav&gt;
&lt;/details&gt;





 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;En el siguiente artículo aprenderás conceptos clave para entender el funcionamiento de las constantes en &lt;strong&gt;Go&lt;/strong&gt; y algunos conceptos de su funcionamiento que te ayudarán a escribir mejor código.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="constantes-en-go"&gt;Constantes en Go&lt;/h2&gt;
&lt;p&gt;una constante es un valor que no cambia en el tiempo y que puede ser referenciado para efectuar operaciones en un programa. Algo particular de &lt;strong&gt;Go&lt;/strong&gt; es que las constantes solo existen en tiempo de compilación. Como sabrás, &lt;strong&gt;Go&lt;/strong&gt; es un lenguaje de programación compilado, por lo que para obtener el código final del programa debemos construirlo. Es aquí donde las constantes son transformadas en valores literales dentro del programa.&lt;/p&gt;
&lt;p&gt;Esto implica que durante la ejecución del código, las constantes no son alojadas en un espacio de memoria como ocurre con otros lenguajes como &lt;em&gt;JavaScript&lt;/em&gt;, sino que son valores quemados en el binario final. Esto optimiza el rendimiento del programa y evita que se alojen valores en memoria que no son necesarios.&lt;/p&gt;
&lt;h2 id="declaración-de-constantes"&gt;Declaración de constantes&lt;/h2&gt;
&lt;p&gt;En &lt;strong&gt;Go&lt;/strong&gt;, la forma de declarar constantes es muy simple y similar a otros lenguajes de programación. Tenemos varias maneras de hacerlo. Veamos cada uno de los casos:&lt;/p&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Las constantes en &lt;strong&gt;Go&lt;/strong&gt; solo pueden hacer referencia a tipos de dato built-in del lenguaje.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7f848e"&gt;// single constant&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;miConstante&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7f848e"&gt;// multi-assignment in one line&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;a&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;b&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;c&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;, &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;, &lt;span style="color:#d19a66"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7f848e"&gt;// multi-assignment in block&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;anotherConstant&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;stringConstant&lt;/span&gt; = &lt;span style="color:#98c379"&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;finalConstant&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="conceptos-clave-de-las-constantes"&gt;Conceptos clave de las Constantes&lt;/h2&gt;
&lt;h3 id="kind-vs-type"&gt;Kind vs Type&lt;/h3&gt;
&lt;p&gt;En &lt;strong&gt;Go&lt;/strong&gt;, las constantes pueden ser de dos tipos, conocidos como &lt;code&gt;kind&lt;/code&gt; y &lt;code&gt;type&lt;/code&gt;. La principal diferencia es que en una constante de tipo &lt;code&gt;kind&lt;/code&gt; no se necesita especificar el tipo de dato que se está utilizando, mientras que en una constante de tipo &lt;code&gt;type&lt;/code&gt; sí es necesario especificarlo. Esto lo podemos observar en el siguiente ejemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7f848e"&gt;// kind&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;name&lt;/span&gt; = &lt;span style="color:#98c379"&gt;&amp;#34;John&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;a&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7f848e"&gt;// type&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;c&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int64&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;d&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float32&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La principal ventaja del uso de &lt;code&gt;kind&lt;/code&gt; vs &lt;code&gt;type&lt;/code&gt; se ve en tiempo de compilación. Este comportamiento se definirá en base al tipo de constante usado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kind&lt;/strong&gt;: El compilador hará un análisis para determinar cuál es el tipo de dato más óptimo para efectuar la operación definida.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;type&lt;/strong&gt;: El compilador no hará ninguna inferencia o análisis sobre cuál debe ser la operación a realizar, sino que siempre usará el mismo tipo de valor (tipo) en la constante.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es importante porque, recuerda, &lt;strong&gt;Go&lt;/strong&gt; no convierte valores automáticamente. Si vas a usar la constante para operar con otros tipos de datos, deberás efectuar la transformación requerida explícitamente.&lt;/p&gt;
&lt;p&gt;Veamos algunos ejemplos con constantes de tipo &lt;code&gt;kind&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;package&lt;/span&gt; &lt;span style="color:#e06c75"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;func&lt;/span&gt; &lt;span style="color:#61afef;font-weight:bold"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;age&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#c678dd"&gt;var&lt;/span&gt; &lt;span style="color:#e06c75"&gt;bigNumber&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int32&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;agePlusNumber&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;:=&lt;/span&gt; &lt;span style="color:#e06c75"&gt;age&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;+&lt;/span&gt; &lt;span style="color:#e06c75"&gt;bigNumber&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;El resultado es: %d\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;agePlusNumber&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Println&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;El tipo de dato de cada variable es:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;age: %T\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;age&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;bigNumber: %T\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;bigNumber&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;agePlusNumber: %T\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;agePlusNumber&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El resultado del anterior ejemplo es:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#56b6c2"&gt;[&lt;/span&gt;Running&lt;span style="color:#56b6c2"&gt;]&lt;/span&gt; go run &lt;span style="color:#98c379"&gt;&amp;#34;/home/dacacode/dacadev/test/tempCodeRunnerFile.go&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;El resultado es: &lt;span style="color:#d19a66"&gt;1020&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;El tipo de dato de cada variable es:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;age: int
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bigNumber: int32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;agePlusNumber: int32
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Como puedes observar, el tipo de &lt;code&gt;age&lt;/code&gt; es &lt;code&gt;int&lt;/code&gt;, mientras que el de &lt;code&gt;bigNumber&lt;/code&gt; y &lt;code&gt;agePlusNumber&lt;/code&gt; es &lt;code&gt;int32&lt;/code&gt;, debido a que el compilador define cuál es el tipo más óptimo.&lt;/p&gt;
&lt;p&gt;Ahora veamos el mismo caso usando constantes de tipo &lt;code&gt;type&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;package&lt;/span&gt; &lt;span style="color:#e06c75"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;func&lt;/span&gt; &lt;span style="color:#61afef;font-weight:bold"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; &lt;span style="color:#e06c75"&gt;age&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int8&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#c678dd"&gt;var&lt;/span&gt; &lt;span style="color:#e06c75"&gt;bigNumber&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int32&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;agePlusNumber&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;:=&lt;/span&gt; &lt;span style="color:#e06c75"&gt;age&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;+&lt;/span&gt; &lt;span style="color:#e06c75"&gt;bigNumber&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;El resultado es: %d\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;agePlusNumber&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Println&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;El tipo de dato de cada variable es:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;age: %T\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;age&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;bigNumber: %T\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;bigNumber&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Printf&lt;/span&gt;(&lt;span style="color:#98c379"&gt;&amp;#34;agePlusNumber: %T\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;agePlusNumber&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El código no se podrá compilar e incluso el IDE nos debería mostrar un error ya que &lt;strong&gt;Go&lt;/strong&gt; nos dirá que la operación enter un tipo de dato y otro no esta permitido, el erro deberá lucir como el siguiente:&lt;/p&gt;




 
 
 
 &lt;div class="flex justify-center"&gt;
 &lt;img
 src="https://blog.dacadev.com/images/golang/constants/const-type-error_hu_b522ac4d59b0f1f3.webp"
 alt="Imagen guia del contenido de la página"/&gt;
 &lt;/div&gt;
 
 
 


&lt;h3 id="pseudo-enumerados"&gt;Pseudo-enumerados&lt;/h3&gt;
&lt;p&gt;Una funcionalidad que podemos aprovechar de las constantes y tipos definidos por el usuario es la creación de lo que podemos denominar &lt;em&gt;pseudo-enumerados&lt;/em&gt;. En &lt;strong&gt;Go&lt;/strong&gt; no disponemos de una estructura de datos de tipo &lt;code&gt;Enum&lt;/code&gt;. sin embargo, podemos emularlas (ojo, no es que sean &lt;code&gt;Enums&lt;/code&gt; en la práctica, pero pueden cumplir funciones similares).&lt;/p&gt;
&lt;p&gt;La creación de estos enumerados es sencilla y consiste en definir un tipo de dato personalizado y posteriormente declarar las constantes con este tipo de dato. Para entenderlo mejor, veamos un ejemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;type&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;Admin&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;Read&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;Write&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;func&lt;/span&gt; &lt;span style="color:#61afef;font-weight:bold"&gt;validateUserPermissions&lt;/span&gt;(&lt;span style="color:#e06c75"&gt;permissions&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt;) &lt;span style="color:#e5c07b"&gt;bool&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#7f848e"&gt;// hacer algo con el código&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el ejemplo podemos ver que al crear el tipo &lt;code&gt;UserPermissions&lt;/code&gt; y luego constantes de este mismo tipo, estamos usando una constante de tipo &lt;code&gt;type&lt;/code&gt;. De esta manera podríamos controlar y exportar estas constantes del paquete. Sin embargo, no olvides que es una emulación de enumeración.&lt;/p&gt;
&lt;h3 id="iota"&gt;iota&lt;/h3&gt;
&lt;p&gt;Quiero hacer énfasis en la declaración de las constantes en el bloque del anterior ejemplo. En ellas podemos observar el uso de un valor numérico secuencial, es decir, que empieza desde 0, 1, 2, &amp;hellip; Esto es importante porque &lt;strong&gt;Go&lt;/strong&gt; nos ofrece una forma rápida y sencilla de realizar este mismo proceso de manera automática. Para ello tenemos el concepto de &lt;code&gt;iota&lt;/code&gt;, que nos permite declarar la secuencia de constantes en bloque empezando desde cero.&lt;/p&gt;
&lt;p&gt;Veamos algunos ejemplos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;A&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;B&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;C&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;func&lt;/span&gt; &lt;span style="color:#61afef;font-weight:bold"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;fmt&lt;/span&gt;.&lt;span style="color:#61afef;font-weight:bold"&gt;Println&lt;/span&gt;(&lt;span style="color:#e06c75"&gt;A&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;B&lt;/span&gt;, &lt;span style="color:#e06c75"&gt;C&lt;/span&gt;) &lt;span style="color:#7f848e"&gt;// 0 1 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el ejemplo anterior, podemos observar que estamos declarando las constantes &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt;, y &lt;code&gt;C&lt;/code&gt; y estas tendrán el valor de 0, 1 y 2 respectivamente. Lo que debemos destacar es el uso de la sintaxis &lt;code&gt;iota&lt;/code&gt;. Si ejecutamos el código, veremos el siguiente resultado:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#56b6c2"&gt;[&lt;/span&gt;Running&lt;span style="color:#56b6c2"&gt;]&lt;/span&gt; go run &lt;span style="color:#98c379"&gt;&amp;#34;/home/dacacode/dacadev/test/main.go&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d19a66"&gt;0&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;De igual manera, podemos agregar operadores al valor de &lt;code&gt;iota&lt;/code&gt;, siempre teniendo claro que el valor inicia en cero y es incremental de a 1 unidad. Veamos unos ejemplos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;KB&lt;/span&gt; = &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;&amp;lt;&amp;lt;&lt;/span&gt; (&lt;span style="color:#d19a66"&gt;10&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;*&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt;) &lt;span style="color:#7f848e"&gt;// 1 &amp;lt;&amp;lt; (10*0) = 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;MB&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1 &amp;lt;&amp;lt; (10*1) = 1024&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;GB&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1 &amp;lt;&amp;lt; (10*2) = 1048576&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;TB&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1 &amp;lt;&amp;lt; (10*3) = 1073741824&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;A&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;B&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;C&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;D&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;E&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;F&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;También podemos saltarnos los valores secuenciales de &lt;code&gt;iota&lt;/code&gt; si estos no fueran necesarios empleando el caracter &lt;code&gt;_&lt;/code&gt; para ignorar el valor. Veamos un ejemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;_&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// Ignora el valor 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;One&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;Two&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;Three&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;_&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// Ignora el valor 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;Five&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;Ten&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;*&lt;/span&gt; &lt;span style="color:#d19a66"&gt;2&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 6 * 2 = 12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e06c75"&gt;Eleven&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 7 * 2 = 14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Con el concepto de &lt;code&gt;iota&lt;/code&gt; ya claro, podemos facilitar la escritura de &lt;em&gt;pseudo-enumeraciones&lt;/em&gt; de la siguiente manera:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;type&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;Admin&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; = &lt;span style="color:#e5c07b"&gt;iota&lt;/span&gt; &lt;span style="color:#56b6c2"&gt;+&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;Read&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e06c75"&gt;Write&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt; &lt;span style="color:#7f848e"&gt;// 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;func&lt;/span&gt; &lt;span style="color:#61afef;font-weight:bold"&gt;validateUserPermissions&lt;/span&gt;(&lt;span style="color:#e06c75"&gt;permissions&lt;/span&gt; &lt;span style="color:#e06c75"&gt;UserPermissions&lt;/span&gt;) &lt;span style="color:#e5c07b"&gt;bool&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#7f848e"&gt;// hacer algo con el código&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;El término proviene de la letra griega &lt;code&gt;ι&lt;/code&gt; (iota), que es la novena letra del alfabeto griego. Históricamente, la letra iota se usa en matemáticas y lógica para representar el elemento más pequeño en un conjunto o una secuencia, lo cual es apropiado dada su función en &lt;strong&gt;Go&lt;/strong&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
</content:encoded></item><item><title>Aprovecha al Máximo go.work y go.mod en Golang</title><link>https://blog.dacadev.com/golang/go-work-y-go-mod/</link><pubDate>Fri, 24 May 2024 00:00:00 -0500</pubDate><guid>https://blog.dacadev.com/golang/go-work-y-go-mod/</guid><dc:creator>Dacadev</dc:creator><category>golang</category><description>Descubre cómo utilizar y optimizar el manejo de módulos y workspaces en Golang para mejorar tu flujo de desarrollo.</description><media:content url="https://blog.dacadev.com/images/golang/go-work-and-go-mod/banner.png" medium="image" type="image/png"/><content:encoded>
&lt;details class="table-of-content "&gt;
 &lt;summary&gt;
 
 Tabla de Contenido
 
 &lt;/summary&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#qué-son-los-módulos-de-golang"&gt;¿Qué son los módulos de Golang?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#cómo-interactuar-con-los-módulos-de-golang"&gt;¿Cómo interactuar con los módulos de Golang?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#qué-es-go-workspace"&gt;¿Qué es Go Workspace?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#cómo-usar-gowork"&gt;¿Cómo usar go.work?&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;
&lt;/nav&gt;
&lt;/details&gt;





 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;En este artículo, aprenderás a usar los módulos de &lt;strong&gt;Golang&lt;/strong&gt;, qué son y cómo usarlos. Además, complementaremos el uso de múltiples módulos en un proyecto con la ayuda de &lt;code&gt;go.work&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="qué-son-los-módulos-de-golang"&gt;¿Qué son los módulos de Golang?&lt;/h2&gt;
&lt;p&gt;Dentro del ecosistema de Golang para gestionar las dependencias de un proyecto, tenemos los módulos. Los módulos son una colección de paquetes de Golang que en conjunto forman una aplicación o librería. Entre los beneficios de los módulos de Golang se encuentran:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Especificar las dependencias y sus versiones.&lt;/li&gt;
&lt;li&gt;Facilitar la descarga de las dependencias de un proyecto y compartirlas.&lt;/li&gt;
&lt;li&gt;Gestionar las importaciones de paquetes que componen el módulo.&lt;/li&gt;
&lt;li&gt;Actualizar y sincronizar las dependencias de un proyecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los módulos en Golang se definen con el archivo &lt;code&gt;go.mod&lt;/code&gt; en la raíz del proyecto y este archivo tiene la siguiente estructura:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e06c75"&gt;module&lt;/span&gt; &amp;lt;&lt;span style="color:#e06c75"&gt;nombre&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;del&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;modulo&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;go&lt;/span&gt; &amp;lt;&lt;span style="color:#c678dd"&gt;go&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;version&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#61afef;font-weight:bold"&gt;require&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#e06c75"&gt;dependencia&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&amp;gt; &amp;lt;&lt;span style="color:#e06c75"&gt;version&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#e06c75"&gt;dependencia&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&amp;gt; &amp;lt;&lt;span style="color:#e06c75"&gt;version&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#56b6c2"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#61afef;font-weight:bold"&gt;replace&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#e06c75"&gt;dependencia&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&amp;gt; =&amp;gt; &amp;lt;&lt;span style="color:#e06c75"&gt;ruta&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;local&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#e06c75"&gt;dependencia&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&amp;gt; =&amp;gt; &amp;lt;&lt;span style="color:#e06c75"&gt;nueva&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;dependencia&lt;/span&gt;&amp;gt; &amp;lt;&lt;span style="color:#e06c75"&gt;version&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#56b6c2"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En la anterior estructura se identifican cuatro partes principales:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;El nombre del módulo:&lt;/strong&gt; Este puede tener cualquier nombre, sin embargo, es buena práctica definir un dominio en donde se alojará el módulo seguido de un path único.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Definir la versión de Go:&lt;/strong&gt; Especifica la versión de Golang que se usará en el proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Las dependencias del proyecto:&lt;/strong&gt; Se especifica el nombre de la dependencia y la versión que se usará. Esta sección no es obligatoria si el módulo no tiene dependencias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directiva &lt;code&gt;replace&lt;/code&gt;:&lt;/strong&gt; Permite reemplazar las dependencias del módulo por otras dependencias o rutas locales, lo cual veremos en profundidad más adelante.&lt;/li&gt;
&lt;/ol&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Podemos hacer la analogía del archivo &lt;code&gt;go.mod&lt;/code&gt; con el archivo &lt;code&gt;package.json&lt;/code&gt; de Node.js o el archivo &lt;code&gt;requirements.txt&lt;/code&gt; de Python.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Junto con el archivo &lt;code&gt;go.mod&lt;/code&gt; encontramos el archivo &lt;code&gt;go.sum&lt;/code&gt;, el cual es un archivo autogenerado que no debes modificar manualmente. Este archivo contiene el listado de todos los paquetes de dependencias del módulo y sus respectivas versiones, sirviendo como referencia para verificar que las dependencias del módulo no hayan sido modificadas.&lt;/p&gt;
&lt;h2 id="cómo-interactuar-con-los-módulos-de-golang"&gt;¿Cómo interactuar con los módulos de Golang?&lt;/h2&gt;
&lt;p&gt;Aunque podemos crear nuestros módulos manualmente creando el archivo &lt;code&gt;go.mod&lt;/code&gt; y definiendo las dependencias, Golang nos provee de una serie de comandos para interactuar con los módulos. Los más importantes son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;go mod init &amp;lt;module-name&amp;gt;&lt;/code&gt; ➔ Inicializa un módulo de Golang en el directorio actual, recibe como parámetro el nombre del módulo y creará el archivo &lt;code&gt;go.mod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go mod get &amp;lt;package-name&amp;gt;&lt;/code&gt; ➔ Descarga un paquete de dependencia del módulo y lo registra dentro del archivo &lt;code&gt;go.mod&lt;/code&gt;. Adicionalmente, puedes actualizar un paquete del módulo usando la bandera &lt;code&gt;-u&lt;/code&gt;, con el comando &lt;code&gt;go get -u &amp;lt;package-name&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go mod tidy&lt;/code&gt; ➔ Sincroniza el estado actual del módulo en el archivo &lt;code&gt;go.mod&lt;/code&gt;, eliminando las dependencias que no se estén usando y agregando las que faltan pero que sí se están usando.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go mod verify&lt;/code&gt; ➔ Verifica que las dependencias del módulo descargadas no hayan tenido modificaciones y estén sincronizadas con el archivo &lt;code&gt;go.sum&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Un comando que no forma parte de &lt;code&gt;go mod&lt;/code&gt; pero que es muy útil es &lt;code&gt;go list -m all&lt;/code&gt;, el cual lista todas las dependencias del módulo y sus respectivas versiones.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="qué-es-go-workspace"&gt;¿Qué es Go Workspace?&lt;/h2&gt;
&lt;p&gt;Hasta este punto, hemos visto qué son y cómo se usan los módulos, pero hay una característica adicional asociada al contexto de los módulos. Cuando trabajamos en un módulo dentro de nuestro editor de código, Go tiene como contexto el directorio del módulo. El problema surge cuando queremos trabajar con varios módulos al mismo tiempo, ya que Go no sabría identificar en qué módulo estamos trabajando.&lt;/p&gt;
&lt;p&gt;Este era un problema común en el desarrollo, ya que muchas veces se tenían módulos que dependían de otros módulos también desarrollados por el mismo equipo. En estos casos, si necesitabas probar cambios de un módulo en otro, tenías que actualizar la dependencia en cuestión y posteriormente actualizarla en el módulo que la usará, haciendo tedioso el proceso de desarrollo.&lt;/p&gt;
&lt;p&gt;Normalmente, para solucionar esto, el desarrollador tenía que configurar manualmente las dependencias que estaba probando para que estas apuntaran a otro módulo o una ruta dentro de su máquina local. Esto se hace con la directiva &lt;code&gt;replace&lt;/code&gt; que &lt;a href="#qu%c3%a9-son-los-m%c3%b3dulos-de-golang"



 


&gt;mencionamos antes&lt;/a&gt;. Este proceso se hacía manualmente y debías estar pendiente de actualizar y revertir los cambios antes de actualizar el paquete en el repositorio.&lt;/p&gt;
&lt;p&gt;Dado todos estos inconvenientes, se agregó &lt;code&gt;go.work&lt;/code&gt; al ecosistema. La principal funcionalidad de los Go Workspaces es facilitar la gestión de los módulos en un mismo editor o contexto. Entre las ventajas de usar Go Work encontramos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permite trabajar con múltiples módulos en un mismo editor.&lt;/li&gt;
&lt;li&gt;Puedes unificar el desarrollo de aplicaciones de Go que se componen de múltiples módulos en un mismo repositorio o ruta de trabajo.&lt;/li&gt;
&lt;li&gt;Mejora el flujo de desarrollo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Su uso es muy similar a lo que ya vimos para &lt;code&gt;go.mod&lt;/code&gt;.&lt;/p&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;&lt;code&gt;go.work&lt;/code&gt; se agregó en la versión 1.18 de Go, por lo que si estás usando una versión anterior a esta, no podrás usar &lt;code&gt;go.work&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="cómo-usar-gowork"&gt;¿Cómo usar go.work?&lt;/h2&gt;
&lt;p&gt;Lo primero que debemos hacer es crear el archivo &lt;code&gt;go.work&lt;/code&gt; en la raíz del proyecto. Este archivo tiene la siguiente estructura:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#c678dd"&gt;go&lt;/span&gt; &amp;lt;&lt;span style="color:#c678dd"&gt;go&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;version&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#61afef;font-weight:bold"&gt;use&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#56b6c2"&gt;/&lt;/span&gt;&amp;lt;&lt;span style="color:#e06c75"&gt;module&lt;/span&gt;&lt;span style="color:#56b6c2"&gt;-&lt;/span&gt;&lt;span style="color:#e06c75"&gt;path&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dentro de la estructura encontramos dos partes principales:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;La versión de Go:&lt;/strong&gt; Especifica la versión de Golang que se usará en el proyecto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directiva &lt;code&gt;use&lt;/code&gt;:&lt;/strong&gt; Especifica la ruta del módulo que se usará en el proyecto.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aunque podemos crear el archivo manualmente, lo recomendable es hacerlo a través de los comandos de Go que están definidos para los Workspaces. Al igual que los módulos de Go, Go Work tiene una serie de comandos que nos permiten interactuar con los Workspaces. Los más importantes son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;go work init&lt;/code&gt; ➔ Inicializa un Workspace de Golang en el directorio actual, creando el archivo &lt;code&gt;go.work&lt;/code&gt; en la raíz del directorio.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go work use &amp;lt;module-path&amp;gt;&lt;/code&gt; ➔ Agrega un módulo al Workspace. Este módulo debe estar ya creado dentro del folder &lt;code&gt;&amp;lt;module-path&amp;gt;&lt;/code&gt;, lo que significa que debe de tener definido el archivo &lt;code&gt;go.mod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go work sync&lt;/code&gt; ➔ Sincroniza los módulos del Workspace. Este comando descarga las dependencias de los módulos que están definidos dentro del Workspace.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Si estás trabajando con un Workspace y un módulo que no está definido en el Workspace, Go no sabrá en qué módulo estás trabajando y te lanzará un error.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Con estos comandos, podrás interactuar con los módulos de Golang y el mismo Workspace será el encargado de resolver las dependencias sin necesidad de realizar configuraciones adicionales. Para explicar mejor qué significa esto, supongamos que tenemos el siguiente sistema de archivos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;proyecto/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── go.work
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── modulo1/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── modulo2/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Podríamos ejecutar comandos Go directamente dentro del módulo de la siguiente manera:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go &lt;span style="color:#e5c07b"&gt;test&lt;/span&gt; ./modulo1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go build ./modulo2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Todo desde la raíz del Workspace. Si no usáramos Workspace, tendríamos que abrir cada módulo en un nuevo editor o realizar las configuraciones pertinentes para que Go entienda qué módulo estamos trabajando.&lt;/p&gt;




 
 





 


&lt;div class="notice info"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Info&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;&lt;p&gt;Este artículo se basa en mi experiencia como desarrollador y en la documentación que podemos encontrar en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://go.dev/blog/get-familiar-with-workspaces"




 target="_blank"
 


&gt;Get familiar with workspaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://go.dev/doc/tutorial/workspaces"




 target="_blank"
 


&gt;Tutorial: Getting started with multi-module workspaces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
</content:encoded></item></channel></rss>