{"id":1119,"date":"2024-03-06T22:30:21","date_gmt":"2024-03-06T21:30:21","guid":{"rendered":"https:\/\/www.glub.biz\/?p=1119"},"modified":"2024-03-11T17:05:52","modified_gmt":"2024-03-11T16:05:52","slug":"lenguaje-de-programacion-go-version-1-22-novedades-y-mejoras","status":"publish","type":"post","link":"https:\/\/www.glub.biz\/?p=1119","title":{"rendered":"Lenguaje de programaci\u00f3n GO versi\u00f3n 1.22, novedades y mejoras"},"content":{"rendered":"<p><strong>Go es un lenguaje de programaci\u00f3n concurrente y compilado con tipado est\u00e1tico inspirado en la sintaxis del lenguaje C. La nueva versi\u00f3n de Go 1.22, llega seis meses despu\u00e9s de la versi\u00f3n 1.21, con una serie de cambios notables en el conjunto de herramientas, el runtime, mejoras de optimizaci\u00f3n, mejoras en el compilador y bibliotecas.<\/strong><img decoding=\"async\" src=\"https:\/\/www.glub.biz\/media\/images\/2024\/GO.jpg\" alt=\"Lenguaje GO\" class=\"alignnone size-medium\" width=\"480\"><\/p>\n<p>Para quienes no conozcan esta herramenta, podemos destacar que se trata de un lenguaje de programaci\u00f3n que est\u00e1 siendo desarrollado por Google con la participaci\u00f3n de la comunidad como una soluci\u00f3n h\u00edbrida que combina el alto rendimiento de los lenguajes compilados con ventajas de los lenguajes de scripting como la facilidad para escribir c\u00f3digo, velocidad de desarrollo y la protecci\u00f3n contra errores.<\/p>\n<p><!--more--><\/p>\n<p><strong>Principales novedades de Go 1.22<\/strong><\/p>\n<p>En esta nueva versi\u00f3n, que se introduce de Go 1.22, se destacan dos cambios en los bucles \u00abfor\u00bb, ya que anteriormente, las variables declaradas por un bucle \u00abfor\u00bb se creaban una vez y se actualizaban en cada iteraci\u00f3n. En Go 1.22, cada iteraci\u00f3n del bucle crea nuevas variables para evitar errores de compartici\u00f3n accidental, adem\u00e1s de ello se agreg\u00f3 soporte experimental (GOEXPERIMENT=rangefunc) para funciones de rango a bucles \u00abfor\u00bb, lo que permite especificar una funci\u00f3n como iterador y se resolvi\u00f3 un problema de larga data con los bucles for que provocaba que las llamadas a corrutinas compartieran variables de bucle entre iteraciones. Adem\u00e1s, los bucles \u00abfor\u00bb ahora pueden recorrer enteros.<\/p>\n<p>Otro cambio destacado en esta nueva versi\u00f3n es la introducci\u00f3n de la capacidad de utilizar un directorio \u00abvendor\u00ab que contiene las dependencias del espacio de trabajo. Ahora, los comandos pueden emplear este directorio, el cual se crea con `go work vendor` y se utiliza en los comandos de compilaci\u00f3n cuando se establece `-mod` en \u00abvendor\u00ab, siendo este el valor predeterminado cuando existe un directorio \u00abvendor\u00bb en el espacio de trabajo.<\/p>\n<p>Es importante se\u00f1alar que la funcionalidad de `go get` ya no es compatible fuera de un m\u00f3dulo en el modo GOPATH heredado. Sin embargo, otros comandos de compilaci\u00f3n como `go build` y `go test` seguir\u00e1n funcionando indefinidamente para programas GOPATH heredados. Adem\u00e1s, el comando `go mod init` ya no intentar\u00e1 importar los requisitos del m\u00f3dulo desde archivos de configuraci\u00f3n de otras herramientas de \u00abvendoring\u00bb (como Gopkg.lock).<\/p>\n<p>Go 1.22 introduce un nuevo paquete io\/unsafe que proporciona funcionalidad para trabajar con punteros y memoria no segura. Este paquete ofrece m\u00e9todos para convertir punteros a y desde tipos seguros y no seguros, as\u00ed como para realizar operaciones de copia de memoria sin verificar los l\u00edmites.<\/p>\n<p>Se continu\u00f3 trabajando para incluir optimizaciones en el compilador basadas en los resultados del perfilado de c\u00f3digo PGO, y es que ahora el compilador utiliza herramientas de desvirtualizaci\u00f3n para reemplazar las llamadas indirectas de varios m\u00e9todos con la ejecuci\u00f3n de bloques en l\u00ednea expandidos. Cuando se habilit\u00f3 PGO, el cambio agregado mejor\u00f3 el rendimiento de la mayor\u00eda de los programas entre un 2 y un 14 por ciento.<\/p>\n<p>En la versi\u00f3n de Go para Windows, los programas que vinculan o cargan bibliotecas Go construidas con -buildmode=c-archive o -buildmode=c-shared ahora pueden utilizar la API de registro de eventos de Windows (ETW) a trav\u00e9s de los nuevos paquetes de runtime\/trace y tracehook, que implementan el protocolo de recopilaci\u00f3n de trazas de eventos Go como un proveedor ETW.<\/p>\n<p>De los dem\u00e1s cambios que se destacan:<\/p>\n<ul>\n<li>El comando go test -cover ahora imprime res\u00famenes de cobertura para paquetes cubiertos que no tienen sus propios archivos de prueba.<\/li>\n<li>os\/exec, se ha agregado la posibilidad de definir los atributos del contexto, lo que permite establecer valores como el directorio de trabajo, variables de entorno y el descriptor de archivos de entrada\/salida para los comandos ejecutados.<\/li>\n<li>Se optimiz\u00f3 la gesti\u00f3n de la memoria en el runtime, lo que se tradujo en un aumento del rendimiento entre un 1% y un 3% y una reducci\u00f3n del consumo de memoria en la mayor\u00eda de las aplicaciones del 1%.<\/li>\n<li>El paquete net\/http, se ha agregado la funci\u00f3n CloseIdleConnections al cliente HTTP, que cierra todas las conexiones inactivas que el cliente ha usado recientemente.<\/li>\n<li>Se ha agregado al compilador una implementaci\u00f3n mejorada experimental (GOEXPERIMENT=newinliner) del mecanismo de inserci\u00f3n de llamadas, que utiliza heur\u00edsticas para separar las operaciones importantes de las que no lo son.<\/li>\n<li>Se ha agregado el paquete \u00bb math\/rand\/v2 \u00bb a la biblioteca est\u00e1ndar, que ofrece una API m\u00e1s consistente y utiliza algoritmos m\u00e1s r\u00e1pidos para generar n\u00fameros pseudoaleatorios.<\/li>\n<li>El paquete net\/http.ServeMux ha agregado la capacidad de especificar m\u00e9todos y m\u00e1scaras en plantillas.<\/li>\n<\/ul>\n<p>Finalmente, si est\u00e1s interesado en poder conocer m\u00e1s al respecto, puedes consultar los detalles en las paginas que te indicamos a continuaci\u00f3n.<\/p>\n<p>Fuentes: <a href=\"https:\/\/blog.desdelinux.net\/go-1-22-ya-fue-liberado-conoce-sus-novedades-y-mejoras\/\" target=\"_blank\" rel=\"noopener noreferrer\">DesdeLinux<\/a> y <a href=\"https:\/\/go.dev\/doc\/go1.22#\">Pagina Oficial<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go es un lenguaje de programaci\u00f3n concurrente y compilado con tipado est\u00e1tico inspirado en la sintaxis del lenguaje C. La nueva versi\u00f3n de Go 1.22, llega seis meses despu\u00e9s de la versi\u00f3n 1.21, con una serie de cambios notables en &hellip; <a href=\"https:\/\/www.glub.biz\/?p=1119\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1119","post","type-post","status-publish","format-standard","hentry","category-noticias"],"_links":{"self":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts\/1119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1119"}],"version-history":[{"count":2,"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts\/1119\/revisions"}],"predecessor-version":[{"id":1123,"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts\/1119\/revisions\/1123"}],"wp:attachment":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}