<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Go on Antonio Cortés (DrZippie)</title><link>https://antoniocortes.com/tags/go/</link><description>Recent content in Go on Antonio Cortés (DrZippie)</description><generator>Hugo</generator><language>es-es</language><lastBuildDate>Thu, 15 Oct 2026 10:04:04 +0200</lastBuildDate><atom:link href="https://antoniocortes.com/tags/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 1.27 reutiliza las conexiones HTTP/1 aunque no leas el cuerpo de la respuesta</title><link>https://antoniocortes.com/go-reutilizacion-conexiones-http/</link><pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/go-reutilizacion-conexiones-http/</guid><description>&lt;p&gt;El blog de Go ha publicado &lt;a href="https://go.dev/blog/http-connection-reuse"&gt;Better HTTP/1 connection reuse&lt;/a&gt;, un artículo corto que explica un cambio de Go 1.27 que parece pequeño, pero que puede hacer que muchos programas vayan bastante más rápidos sin tocar una línea. Empieza con esta función:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hace una petición GET y devuelve el código de estado. Nada más. Llamada 100 veces contra &lt;code&gt;index.golang.org&lt;/code&gt; usando HTTP/1, tarda unos &lt;strong&gt;710 ms con Go 1.26&lt;/strong&gt; y unos &lt;strong&gt;150 ms con Go 1.27&lt;/strong&gt;. Casi cinco veces más rápido, con el mismo código.&lt;/p&gt;</description></item><item><title>Tu código Go no debería depender de GitHub</title><link>https://antoniocortes.com/go-dominio-propio-imports/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/go-dominio-propio-imports/</guid><description>&lt;p&gt;Una de las ideas más prácticas de Go es que la ruta de un import es, a la vez, el nombre del paquete y el sitio de donde descargarlo. Escribes &lt;code&gt;import &amp;quot;github.com/usuario/libreria&amp;quot;&lt;/code&gt; y el comando &lt;code&gt;go&lt;/code&gt; sabe que tiene que ir a GitHub y clonar ese repositorio con git. No hace falta un registro central como npm o Packagist, y cualquiera sabe dónde abrir un issue.&lt;/p&gt;
&lt;p&gt;El problema es que esa comodidad tiene letra pequeña, y la explica muy bien Iain Cambridge en &lt;a href="https://iain.rocks/blog/dont-couple-your-go-code-to-github"&gt;Don&amp;rsquo;t couple your Go code to GitHub&lt;/a&gt;: si la ruta del import es la dirección de tu hosting, &lt;strong&gt;tu código queda atado a ese hosting&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Go Concurrency Distilled: toda la concurrencia de Go en un solo sitio</title><link>https://antoniocortes.com/go-concurrency-distilled/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/go-concurrency-distilled/</guid><description>&lt;p&gt;En 2015 escribí un artículo sobre &lt;a href="https://antoniocortes.com/que-me-gusta-de-go/"&gt;qué me gustaba de Go&lt;/a&gt;, y una de las cosas que más me costaba explicar entonces era la concurrencia. Las goroutines parecían threads, pero no lo eran. Se ejecutaban &amp;ldquo;de forma independiente&amp;rdquo;, pero no necesariamente en paralelo. Todo sonaba un poco raro hasta que te ponías a escribir código.&lt;/p&gt;
&lt;p&gt;Once años después, Anton Zhiyanov ha publicado justo el recurso que me habría gustado tener aquella tarde: &lt;a href="https://antonz.org/go-concurrency-distilled/"&gt;Go Concurrency Distilled&lt;/a&gt;, un minilibro gratuito que repasa &lt;strong&gt;toda la concurrencia de Go en una sola página&lt;/strong&gt;, con ejemplos interactivos que puedes modificar y ejecutar en el navegador.&lt;/p&gt;</description></item><item><title>go fix vuelve: modernizar código Go con un solo comando</title><link>https://antoniocortes.com/go-fix-modernizar-codigo/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/go-fix-modernizar-codigo/</guid><description>&lt;p&gt;Si llevas unos cuantos años escribiendo Go, tu código tiene capas. Hay un &lt;code&gt;interface{}&lt;/code&gt; de cuando aún no existía &lt;code&gt;any&lt;/code&gt;, un &lt;code&gt;for i := 0; i &amp;lt; n; i++&lt;/code&gt; de antes del range sobre enteros, algún &lt;code&gt;x := x&lt;/code&gt; dentro de un bucle para esquivar el famoso problema de las variables de iteración y más de un &lt;code&gt;if&lt;/code&gt; encadenado que hoy sería un &lt;code&gt;min()&lt;/code&gt;. Nada de eso está mal. Simplemente, el lenguaje ha evolucionado y el código se ha quedado donde estaba.&lt;/p&gt;</description></item><item><title>Go 1.27 y los métodos genéricos: ocho años esperando</title><link>https://antoniocortes.com/2026/08/28/go-metodos-genericos/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/2026/08/28/go-metodos-genericos/</guid><description>&lt;p&gt;Llevo escribiendo sobre Go en este blog desde 2015. En aquel artículo de &amp;ldquo;Qué me gusta de Go&amp;rdquo; hablaba de la simplicidad, de la compilación rápida, de lo bien que sienta un lenguaje que no te obliga a memorizar veinte formas de hacer lo mismo. Y luego llegó Go 1.18 con los genéricos, en 2022, y con ellos una asimetría que ha incomodado a mucha gente durante años: podías escribir tipos genéricos y funciones genéricas, pero no métodos genéricos.&lt;/p&gt;</description></item><item><title>Vercel Sandbox: ¿Ejecutar código PHP, Node y Go de forma segura?</title><link>https://antoniocortes.com/vercel-sandbox/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/vercel-sandbox/</guid><description>&lt;p&gt;Vercel ha anunciado la disponibilidad general de &lt;a href="https://vercel.com/blog/vercel-sandbox-is-now-generally-available"&gt;Vercel Sandbox&lt;/a&gt;, una capa de ejecución diseñada específicamente para agentes de IA. Pero más allá del hype de los agentes, hay una pregunta interesante: ¿puede servirnos para ejecutar código de forma segura en diferentes lenguajes como PHP, Node o Go?&lt;/p&gt;
&lt;h2 id="qué-es-vercel-sandbox"&gt;¿Qué es Vercel Sandbox?&lt;/h2&gt;
&lt;p&gt;Vercel Sandbox proporciona microVMs Linux bajo demanda. Cada sandbox está aislado, con su propio sistema de archivos, red y espacio de procesos. Obtienes acceso &lt;code&gt;sudo&lt;/code&gt;, gestores de paquetes y la capacidad de ejecutar los mismos comandos que ejecutarías en una máquina Linux.&lt;/p&gt;</description></item><item><title>Cuando la curiosidad se encuentra con Go: TinyEMU-Go y el arte de portar un emulador con IA</title><link>https://antoniocortes.com/2026/01/31/cuando-la-curiosidad-se-encuentra-con-go-tinyemu-go-y-el-arte-de-portar-un-emulador-con-ia/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/2026/01/31/cuando-la-curiosidad-se-encuentra-con-go-tinyemu-go-y-el-arte-de-portar-un-emulador-con-ia/</guid><description>&lt;p&gt;Hace unos días me topé con un artículo que me dejó literalmente con la boca abierta. No es que sea nuevo - en realidad es de enero de 2026, pero bueno, a veces llega tarde a mi radar - pero la combinación de tecnologías y la historia detrás me parecen fascinantes.&lt;/p&gt;
&lt;p&gt;Se trata de &lt;strong&gt;TinyEMU-Go&lt;/strong&gt;: un emulador de RISC-V escrito completamente en Go, portado desde C usando Claude. Y lo mejor: puedes ejecutar un Linux completo con un solo comando.&lt;/p&gt;</description></item><item><title>Recursos 11 de marzo 2022</title><link>https://antoniocortes.com/2022/03/11/recursos-11-de-marzo-2022/</link><pubDate>Fri, 11 Mar 2022 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/2022/03/11/recursos-11-de-marzo-2022/</guid><description>&lt;h2 id="options-pattern-in-golang"&gt;&lt;a href="https://levelup.gitconnected.com/options-pattern-in-golang-9a0384a9d8db"&gt;Options Pattern in Golang&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Option pattern is a functional programming pattern that is used to provide optional arguments to a function that can be used to modify its behavior.&lt;/p&gt;
&lt;h2 id="how-to-create-a-simple-event-streaming-in-laravel"&gt;&lt;a href="https://devdojo.com/bobbyiliev/how-to-create-a-simple-event-streaming-in-laravel"&gt;How to create a simple event streaming in Laravel?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Event streams provide you with a way to send events to the client without having to reload the page. This is useful for things like updating the user interface in real-time changes are made to the database.&lt;/p&gt;</description></item><item><title>Un día descubriré lo que es la zona de confort, o no</title><link>https://antoniocortes.com/zona-de-confort/</link><pubDate>Sat, 06 Aug 2016 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/zona-de-confort/</guid><description>&lt;p&gt;Momentos de cambios, momentos de evolución, una constante en mi vida, con el 25 aniversario de la creación de la web he entrado en modo &amp;ldquo;revisión&amp;rdquo; y estoy altamente desconcertado.&lt;/p&gt;
&lt;p&gt;Llevo el mismo tiempo (25 años) haciendo cosas, disfrutando, siempre con el mismo concepto y particularidad: Disfrute y resultado, pero ya hace mucho que no es relevante (cosa que tambien es poco relevante).&lt;/p&gt;
&lt;p&gt;Me he dado cuenta que lo habitual es hacer cosas dentro de tu zona de confort, y yo nunca he tenido una ni he sabido que podía existir, de ahí que haya tocado y hecho cosas poco usuales o quizás a &amp;ldquo;destiempo&amp;rdquo;, cuando cierta tecnología se podía de moda &amp;ldquo;Buzz&amp;rdquo; hacía tiempo que no lo utilizaba porque no me aportaba lo que me aportaba otra cosa, &amp;hellip;&lt;/p&gt;</description></item><item><title>Go en el mundo real</title><link>https://antoniocortes.com/2016/03/13/go-en-el-mundo-real/</link><pubDate>Sun, 13 Mar 2016 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/2016/03/13/go-en-el-mundo-real/</guid><description>&lt;p&gt;En &lt;a href="http://www.sevilladevelopers.com"&gt;Sevilla Developers Conf 2&lt;/a&gt; comenté algunos ejemplos de quién utiliza y para que Go.&lt;/p&gt;
&lt;p&gt;Entre otros estos me han parecido interesantes, y crearé una lista un poco más grande que nos servirá para ver casos de uso reales y casos de éxito a la hora de escoger Go para determinadas soluciones.&lt;/p&gt;</description></item><item><title>Una consulta en Gremlin para Cayley</title><link>https://antoniocortes.com/2015/10/25/cayle-gremlin-example/</link><pubDate>Sun, 25 Oct 2015 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/2015/10/25/cayle-gremlin-example/</guid><description>&lt;p&gt;Desde Cayley podemos hacer consultas vía REST en dos &amp;ldquo;lenguajes&amp;rdquo;: MQL y una versión reducida de Gremlin&lt;/p&gt;
&lt;p&gt;Con el siguiente ejemplo podemos obtener los skills más habituales de personas que pertenezcan a una industria, dentro del sector &amp;ldquo;Edu&amp;rdquo;&lt;/p&gt;







&lt;div class="gist-container my-6"&gt;
 &lt;div class="bg-gray-50 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden"&gt;
 &lt;div class="bg-gray-200 dark:bg-gray-700 px-4 py-2 border-b border-gray-300 dark:border-gray-600 flex items-center justify-between"&gt;
 &lt;div class="flex items-center space-x-2"&gt;
 &lt;svg class="w-4 h-4 text-gray-600 dark:text-gray-400" fill="currentColor" viewBox="0 0 20 20"&gt;
 &lt;path fill-rule="evenodd" d="M3 4a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm0 4a1 1 0 011-1h12a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1V8z" clip-rule="evenodd"/&gt;
 &lt;/svg&gt;
 &lt;span class="text-sm font-medium text-gray-700 dark:text-gray-300"&gt;GitHub Gist&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="flex items-center space-x-2"&gt;
 &lt;a href="https://gist.github.com/drzippie/a9141708058960cde31a" 
 target="_blank" rel="noopener noreferrer"
 class="text-sm text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 font-medium"&gt;
 Ver en GitHub →
 &lt;/a&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 
 &lt;div class="p-4"&gt;&lt;script src="https://gist.github.com/drzippie/a9141708058960cde31a.js"&gt;&lt;/script&gt;&lt;noscript&gt;
 &lt;div class="bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-700 rounded-md p-4"&gt;
 &lt;div class="flex"&gt;
 &lt;div class="flex-shrink-0"&gt;
 &lt;svg class="h-5 w-5 text-yellow-400" viewBox="0 0 20 20" fill="currentColor"&gt;
 &lt;path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd" /&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;div class="ml-3"&gt;
 &lt;h3 class="text-sm font-medium text-yellow-800 dark:text-yellow-200"&gt;
 JavaScript requerido
 &lt;/h3&gt;
 &lt;div class="mt-2 text-sm text-yellow-700 dark:text-yellow-300"&gt;
 &lt;p&gt;Para ver este Gist, necesitas tener JavaScript habilitado. 
 &lt;a href="https://gist.github.com/drzippie/a9141708058960cde31a" 
 class="underline font-medium" target="_blank" rel="noopener noreferrer"&gt;
 Ver directamente en GitHub
 &lt;/a&gt;
 &lt;/p&gt;</description></item><item><title>Qué me gusta de Go</title><link>https://antoniocortes.com/que-me-gusta-de-go/</link><pubDate>Sat, 25 Apr 2015 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/que-me-gusta-de-go/</guid><description>&lt;p&gt;&lt;img class=" size-full wp-image-1901 alignright" src="https://antoniocortes.com/uploads/2015/04/goimg1910.png" alt="goimg1910" data-recalc-dims="1" /&gt;Siempre me ha gustado ver y probar diferentes tecnologías, y dentro de estas, como no, lenguajes de programación.&lt;/p&gt;
&lt;p&gt;Ejemplo de esto fue el uso intensivo que di en su momento, en Arrakis, a &lt;a href="http://www.rebol.com/"&gt;Rebol&lt;/a&gt; , un lenguaje multiplataforma interpretado, con todo lo que podías necesitar para realizar geniales scripts de limpieza de datos, en una sintaxis “extraña”, pero bella en su planteamiento.&lt;/p&gt;
&lt;p&gt;El caso de Go fue un poco diferente, porque al igual que me ocurrió con Angular, en su momento (hace varios años) traté de darle una oportunidad, pero toda la información y ejemplos que encontraba eran bloques de código “muy pequeño”, no veía en eso (a mirada de pájaro) que estuviese terminado, parecía un lenguaje más académico/conceptual que algo para su uso real.&lt;/p&gt;</description></item><item><title>Como ver si estás Logueado en WordPress desde Go</title><link>https://antoniocortes.com/como-ver-si-estas-logueado-en-wordpress-desde-go-golang/</link><pubDate>Wed, 25 Mar 2015 00:00:00 +0000</pubDate><guid>https://antoniocortes.com/como-ver-si-estas-logueado-en-wordpress-desde-go-golang/</guid><description>&lt;p&gt;Como prueba de concepto estoy haciendo una pequeña API en Golang que, en un Apache con mod_proxy, sirve ciertos contenidos a un WordPress.&lt;/p&gt;</description></item></channel></rss>