{"id":121950,"date":"2025-02-15T14:22:29","date_gmt":"2025-02-15T12:22:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/go-1-24"},"modified":"2025-02-15T14:22:29","modified_gmt":"2025-02-15T12:22:29","slug":"go-1-24","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/news\/go-1-24","title":{"rendered":"Go 1.24","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><a rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/images\/21754\/original.png\" itemprop=\"contentURL\">            <img decoding=\"async\" alt=\"Go 1.24\" src=\"\/wp-content\/uploads\/2025\/02\/6d6299421d83951d055782658814425f.jpg\" style=\"display:block;margin: 0 auto;\" \/>                   <\/a>                       <noindex>      <noindex><\/p>\n<p>El nuevo lanzamiento del lenguaje Go, versi\u00f3n 1.24, llega seis meses despu\u00e9s de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. La mayor\u00eda de los cambios se encuentran en la implementaci\u00f3n de la herramienta, el tiempo de ejecuci\u00f3n y las bibliotecas. Como siempre, la versi\u00f3n garantiza <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">el compromiso de compatibilidad<\/a> de Go 1. Se espera que los desarrolladores del lenguaje contin\u00faen compilando y ejecutando casi todos los programas de Go como antes.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>Cambios en el lenguaje<\/h2>\n<p> <noindex><\/p>\n<p>Go 1.24 ahora soporta completamente <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">alias de tipos gen\u00e9ricos<\/a>: un alias de tipo puede ser parametrizado como un tipo declarado. Los detalles se encuentran en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">la especificaci\u00f3n del lenguaje<\/a>. Por el momento, esta opci\u00f3n puede desactivarse configurando GOEXPERIMENT=noaliastypeparams; sin embargo, la opci\u00f3n aliastypeparams ser\u00e1 eliminada en Go 1.25.<\/p>\n<p><\/noindex> <\/p>\n<h2>Herramientas<\/h2>\n<h3>El comando go<\/h3>\n<p> <noindex><\/p>\n<p>Ahora los m\u00f3dulos go pueden rastrear dependencias ejecutables usando la directiva tool en go.mod. Esto elimina la necesidad de una soluci\u00f3n anterior que a\u00f1ad\u00eda herramientas como importaciones vac\u00edas en el archivo, com\u00fanmente llamado \u201ctools.go\u201d. El comando go tool ahora puede ejecutar estas herramientas adem\u00e1s de las herramientas proporcionadas con Go. M\u00e1s informaci\u00f3n se puede ver en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">la documentaci\u00f3n<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>La nueva bandera -tool para go get agrega la directiva de herramientas en el m\u00f3dulo actual para los paquetes especificados, adem\u00e1s de a\u00f1adir la directiva de requisitos.<\/p>\n<p> <noindex><\/p>\n<p>Nuevo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">el meta-patr\u00f3n tool<\/a> se refiere a todas las herramientas en el m\u00f3dulo actual. Esto puede ser utilizado para actualizar todas a trav\u00e9s de go get tool o para instalarlas en su directorio GOBIN a trav\u00e9s de go install tool.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Los archivos ejecutables creados a trav\u00e9s de go run y el nuevo comportamiento de go tool ahora se almacenan en cach\u00e9 en la cach\u00e9 de compilaci\u00f3n de Go. Esto hace que las ejecuciones repetidas se beneficien de una cach\u00e9 aumentada. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Los comandos go build y go install ahora aceptan la bandera -json, que informa la salida y errores de compilaci\u00f3n como salida estructurada JSON en la salida est\u00e1ndar. Los detalles del formato pueden verse en go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>Adem\u00e1s, go test -json ahora informa la salida y errores de compilaci\u00f3n en JSON, mezcl\u00e1ndose con el JSON del resultado de las pruebas. Se pueden diferenciar por los nuevos tipos de Action, pero si causan problemas en el sistema de integraci\u00f3n de pruebas, se puede volver a la salida textual de la compilaci\u00f3n a trav\u00e9s de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">la configuraci\u00f3n GODEBUG<\/a> gotestjsonbuildtext=1.<\/p>\n<p><\/noindex> <\/p>\n<p>La nueva variable de entorno GOAUTH proporciona una forma flexible de autenticar tiradas privadas de m\u00f3dulos. Se pueden ver los detalles en go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>El comando go build ahora establece <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">la versi\u00f3n del m\u00f3dulo principal<\/a> en el binario compilado, basado en la etiqueta y\/o el commit del sistema de control de versiones. El sufijo +dirty se a\u00f1adir\u00e1 si hay cambios no confirmados. Se puede usar la bandera -buildvcs=false para omitir la informaci\u00f3n del control de versiones del binario.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuevo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configuraci\u00f3n de GODEBUG<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> ahora se puede utilizar para rastrear el proceso de selecci\u00f3n del toolchain en el comando go.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo soporta nuevas anotaciones para funciones C para mejorar el rendimiento en tiempo de ejecuci\u00f3n. #cgo noescape cFunctionName le dice al compilador que la memoria pasada a la funci\u00f3n C cFunctionName no se escapa. #cgo nocallback cFunctionName le dice al compilador que la funci\u00f3n C cFunctionName no llama de vuelta a ninguna funci\u00f3n Go. M\u00e1s informaci\u00f3n se puede ver en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">la documentaci\u00f3n de cgo<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo ahora se niega a compilar llamadas a funciones C que tienen declaraciones incompatibles. Por ejemplo, si f se declara simult\u00e1neamente como void f(int) y void f(double), cgo reportar\u00e1 un error en lugar de generar una secuencia de llamada incorrecta f(0). Una novedad en esta versi\u00f3n es la mejor detecci\u00f3n de esta condici\u00f3n de error cuando las declaraciones incompatibles aparecen en diferentes archivos. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>La herramienta objdump ahora soporta la desensamblaci\u00f3n en 64 bits de LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) y S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>El nuevo analizador de tests informa sobre errores comunes en las declaraciones de tests, fuzzers, benchmarks y ejemplos en paquetes de tests, como nombres mal formados, firmas incorrectas o ejemplos que documentan identificadores inexistentes. Algunos de estos errores pueden resultar en tests no ejecutados.<\/p>\n<p> <noindex><\/p>\n<p>El analizador printf existente ahora informa diagn\u00f3sticos sobre llamadas de la forma fmt.Printf(s), donde s es una cadena de formato no constante, sin otros argumentos. Tales llamadas casi siempre son un error, ya que el valor s puede contener el s\u00edmbolo %; en su lugar, use fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Esta verificaci\u00f3n tiende a encontrar problemas en el c\u00f3digo existente, y por lo tanto se aplica solo cuando la versi\u00f3n del lenguaje (como se indica en la directiva go del archivo go.mod o comentarios `\/\/go:build) es al menos Go 1.24, para evitar fallos en la integraci\u00f3n continua al actualizar a la toolchain Go 1.24.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>El analizador existente de buildtag ahora informa sobre diagn\u00f3sticos cuando hay un error. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">en la restricci\u00f3n de construcci\u00f3n de versiones anteriores.<\/a> Go en la directiva \/\/go:build. Por ejemplo, \/\/go:build go1.23.1 se refiere a una versi\u00f3n puntual; en su lugar, use \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>El analizador existente copylock ahora informa sobre diagn\u00f3sticos cuando una variable declarada en un bucle triple \u2018for\u2019, como for i := iter(); done(i); i = next(i) { \u2026 }, contiene un sync.Locker como sync.Mutex. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> cambi\u00f3 el comportamiento de tales bucles para crear una nueva variable en cada iteraci\u00f3n, copiando valores de la iteraci\u00f3n anterior; esta copia no es segura para los locks. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/66387\">#66387<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>GOCACHEPROG<\/h3>\n<p> <noindex><\/p>\n<p>El binario interno cmd\/go y el mecanismo de cach\u00e9 de pruebas ahora pueden ser implementados por procesos secundarios que implementen el protocolo JSON entre la herramienta cmd\/go y un proceso secundario llamado por la variable de entorno GOCACHEPROG. Antes, esto estaba bajo GOEXPERIMENT. Los detalles del protocolo se pueden ver en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">la documentaci\u00f3n<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Tiempo de ejecuci\u00f3n<\/h2>\n<p> <noindex><\/p>\n<p>Varias mejoras de rendimiento en el tiempo de ejecuci\u00f3n han reducido el costo de CPU en un 2-3% en promedio entre un conjunto de benchmarks representativos. Los resultados pueden variar seg\u00fan la aplicaci\u00f3n. Estas mejoras incluyen una nueva implementaci\u00f3n integrada de map basada en <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Tablas Suecas<\/a>, una asignaci\u00f3n de memoria m\u00e1s eficiente para objetos peque\u00f1os y una nueva implementaci\u00f3n interna de mutex del tiempo de ejecuci\u00f3n.<\/p>\n<p><\/noindex> <\/p>\n<p>La nueva implementaci\u00f3n integrada de map y el nuevo mutex interno del tiempo de ejecuci\u00f3n se pueden desactivar con las configuraciones GOEXPERIMENT=noswissmap y GOEXPERIMENT=nospinbitmutex respectivamente durante la compilaci\u00f3n.<\/p>\n<h2>Compilador<\/h2>\n<p>El compilador ya prohib\u00eda definir nuevos m\u00e9todos con tipos de receptor que fueron generados por cgo, pero era posible eludir esta restricci\u00f3n a trav\u00e9s de un alias de tipo. Go 1.24 ahora siempre informa un error si el receptor designa un tipo generado por cgo, ya sea directa o indirectamente (a trav\u00e9s de un alias de tipo).<\/p>\n<h2>Vinculador<\/h2>\n<p>El vinculador ahora genera un identificador de construcci\u00f3n GNU (registro ELF NT_GNU_BUILD_ID) en plataformas ELF y UUID (comando de carga Mach-O LC_UUID) en macOS por defecto. El identificador de construcci\u00f3n o UUID se deriva del identificador de construcci\u00f3n de Go. Esto se puede desactivar con la bandera del vinculador -B none, o sobrescribir con la bandera del vinculador -B 0xNNNN con un valor hexadecimal especificado por el usuario.<\/p>\n<h2>Despliegue<\/h2>\n<p> <noindex><\/p>\n<p>Como se indic\u00f3 en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">las notas de versi\u00f3n de Go 1.22<\/a>, Go 1.24 ahora requiere Go 1.22.6 o posterior para su compilaci\u00f3n. Los desarrolladores esperan que Go 1.26 requiera un lanzamiento puntual de Go 1.24 o posterior para compilar.<\/p>\n<p><\/noindex> <\/p>\n<h2>Biblioteca est\u00e1ndar<\/h2>\n<h3>Acceso a la sistema de archivos restringido por directorio<\/h3>\n<p> <noindex><\/p>\n<p>Nuevo tipo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> permite realizar operaciones con el sistema de archivos dentro de un directorio espec\u00edfico.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>La funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> abre un directorio y devuelve <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. Los m\u00e9todos en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> operan en este directorio y no permiten que las rutas se refieran a ubicaciones fuera del directorio, incluyendo aquellas que siguen enlaces simb\u00f3licos fuera del directorio. Los m\u00e9todos en os.Root reflejan la mayor\u00eda de las operaciones del sistema de archivos disponibles en el paquete os, incluyendo, por ejemplo, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Open\">os.Root.Open<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Create\">os.Root.Create<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Mkdir\">os.Root.Mkdir<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nueva funci\u00f3n de benchmark<\/h3>\n<p> <noindex><\/p>\n<p>Los benchmarks ahora pueden utilizar un m\u00e9todo m\u00e1s r\u00e1pido y menos propenso a errores <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> para realizar iteraciones en el benchmark como for b.Loop() { \u2026 } en lugar de las t\u00edpicas estructuras de bucle con b.N como for range b.N. Esto ofrece dos ventajas significativas:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>La funci\u00f3n de benchmark se ejecuta exactamente una vez por cada -count, por lo que los costosos pasos de configuraci\u00f3n y limpieza se realizan solo una vez.<\/li>\n<li>Los par\u00e1metros de llamada a la funci\u00f3n y los resultados permanecen activos, evitando que el compilador optimice completamente el cuerpo del bucle.<\/li>\n<\/ul>\n<h3>Finalizadores mejorados<\/h3>\n<p> <noindex><\/p>\n<p>Nueva funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> es un mecanismo de limpieza que es m\u00e1s flexible, m\u00e1s eficiente y menos propenso a errores que <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup adjunta una funci\u00f3n de limpieza a un objeto, que se ejecutar\u00e1 tan pronto como el objeto ya no est\u00e9 disponible. Sin embargo, a diferencia de SetFinalizer, se pueden adjuntar m\u00faltiples limpiezas a un mismo objeto, las limpiezas pueden ser adjuntadas a punteros internos, las limpiezas normalmente no causan fugas cuando los objetos forman un ciclo, y las limpiezas no retrasan la liberaci\u00f3n del objeto o los objetos a los que apunta. El nuevo c\u00f3digo debe preferir AddCleanup a SetFinalizer.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuevo paquete weak<\/h3>\n<p> <noindex><\/p>\n<p>Nuevo paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> proporciona punteros d\u00e9biles.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Los punteros d\u00e9biles son un primitivo de bajo nivel proporcionado para crear estructuras que utilizan memoria de manera eficiente, como diccionarios d\u00e9biles para mapear valores, diccionarios de canonizaci\u00f3n para cualquier cosa que no est\u00e9 cubierta por el paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, y varios tipos de cach\u00e9s. Para apoyar estos casos de uso, esta versi\u00f3n tambi\u00e9n proporciona <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Comparable<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuevo paquete crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Nuevo paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementa ML-KEM-768 y ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM es un mecanismo de intercambio de claves post-cu\u00e1ntico, anteriormente conocido como Kyber y especificado en <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nuevos paquetes crypto\/hkdf, crypto\/pbkdf2 y crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Nuevo paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementa la funci\u00f3n de salida de clave basada en HMAC \u201cExtract-and-Expand\u201d HKDF, como se define en <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuevo paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementa la funci\u00f3n de salida de clave basada en contrase\u00f1a PBKDF2, como se define en <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuevo paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementa la funci\u00f3n hash SHA-3 y SHAKE y las funciones de salida extensible cSHAKE, como se define en <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Los tres paquetes se basan en paquetes existentes de golang.org\/x\/crypto\/\u2026<\/p>\n<h3>Cumplimiento FIPS 140-3<\/h3>\n<p> <noindex><\/p>\n<p>Esta versi\u00f3n incluye <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">un nuevo conjunto de mecanismos para garantizar el cumplimiento de FIPS 140-3<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>El m\u00f3dulo criptogr\u00e1fico de Go es un conjunto de paquetes internos de la biblioteca est\u00e1ndar que se utilizan de manera transparente para implementar algoritmos aprobados por FIPS 140-3. Las aplicaciones no requieren cambios para utilizar el m\u00f3dulo criptogr\u00e1fico de Go para algoritmos aprobados.<\/p>\n<p> <noindex><\/p>\n<p>La nueva variable de entorno GOFIPS140 se puede utilizar para seleccionar la versi\u00f3n del m\u00f3dulo criptogr\u00e1fico de Go a utilizar en la compilaci\u00f3n. La nueva <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configuraci\u00f3n de GODEBUG<\/a> fips140 se puede utilizar para habilitar el modo FIPS 140-3 durante la ejecuci\u00f3n.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 incluye el m\u00f3dulo criptogr\u00e1fico de Go versi\u00f3n v1.0.0, que actualmente se est\u00e1 probando con un laboratorio acreditado de CMVP.<\/p>\n<h3>Nuevo paquete experimental testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Nuevo paquete experimental <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> proporciona soporte para la prueba de c\u00f3digo concurrente.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>La funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> ejecuta un grupo de gorutinas en un \u2018burbuja\u2019 aislada. En la burbuja, las funciones del paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> operan en relojes falsos.<\/li>\n<li>Funciones <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> espera a que todas las gorutinas se bloqueen en la burbuja actual.<\/li>\n<\/ul>\n<p>Los detalles se pueden ver en la documentaci\u00f3n del paquete.<\/p>\n<p> <noindex><\/p>\n<p>El paquete synctest es experimental y debe ser habilitado configurando GOEXPERIMENT=synctest. La API del paquete puede cambiar en futuras versiones. En <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> se pueden ver m\u00e1s detalles y proporcionar comentarios.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cambios menores en la biblioteca<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>Las implementaciones (*Writer.AddFS) en archive\/zip y archive\/tar ahora escriben el encabezado del directorio para un directorio vac\u00edo.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> agrega varias funciones que trabajan con iteradores:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> devuelve un iterador de l\u00edneas separadas por nueva l\u00ednea en un slice de bytes.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> devuelve un iterador sobre todas las sublistas de un slice de bytes, separado por un delimitador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> devuelve un iterador sobre las sublistas de un slice de bytes, separado despu\u00e9s de cada ocurrencia del delimitador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> devuelve un iterador sobre las sublistas de un slice de bytes alrededor de las secuencias de caracteres de espacio, como se define <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsFuncSeq\">FieldsFuncSeq<\/a> devuelve un iterador sobre las sublistas de un slice de bytes alrededor de las secuencias de puntos de c\u00f3digo Unicode que cumplen con el predicado.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>El valor devuelto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> ya no implementa los m\u00e9todos NewCTR, NewGCM, NewCBCEncrypter y NewCBCDecrypter. Estos m\u00e9todos no estaban documentados y no estaban disponibles en todas las arquitecturas. Ahora el valor <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> debe pasarse directamente a las funciones correspondientes <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. En este momento, crypto\/cipher a\u00fan verifica estos m\u00e9todos en los valores Block, incluso si ya no son compatibles con la biblioteca est\u00e1ndar.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nueva funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> devuelve <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, que implementa AES-GCM, generando un n\u00famero \u00fanico aleatorio durante Seal y a\u00f1adi\u00e9ndolo al inicio del texto cifrado.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Implementaci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, devuelto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> al usar con <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> ahora es varias veces m\u00e1s r\u00e1pido en amd64 y arm64.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewOFB\">NewOFB<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBEncrypter\">NewCFBEncrypter<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> ahora se han declarado obsoletos. Los modos OFB y CFB no son autenticados, lo que en general permite que ataques activos manipulen y restauren texto plano. Se recomienda a las aplicaciones usar <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> en su lugar. Si se requiere un modo no autenticado <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> se puede usar <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> en su lugar.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa\/\">crypto\/ecdsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa#PrivateKey.Sign\">PrivateKey.Sign<\/a> ahora crea una firma determinista de acuerdo con <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">RFC 6979<\/a>, si la fuente de aleatoriedad es nil.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/md5\/\">crypto\/md5<\/a><\/h4>\n<p> <noindex><\/p>\n<p>El valor devuelto <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">md5.New<\/a>, ahora tambi\u00e9n implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand\/\">crypto\/rand<\/a><\/h4>\n<p> <noindex><\/p>\n<p>La funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Read\">Read<\/a> ahora garantiza la ausencia de fallos. Si Read encuentra un error durante la lectura <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">Reader<\/a>, el programa finalizar\u00e1 de forma irreversible. Tenga en cuenta que el Reader predeterminado est\u00e1 documentado para funcionar siempre con \u00e9xito, por lo que este cambio solo deber\u00eda afectar a aquellos programas que redefinen la variable Reader. Una excepci\u00f3n son los n\u00facleos de Linux anteriores a la versi\u00f3n 3.17, donde el Reader predeterminado a\u00fan abre \/dev\/urandom y puede fallar.<\/p>\n<p><\/noindex> <\/p>\n<p>En Linux 6.11 y posteriores, el Reader ahora utiliza la llamada al sistema getrandom a trav\u00e9s de vDSO. Esto es varias veces m\u00e1s r\u00e1pido, normalmente para lecturas peque\u00f1as.<\/p>\n<p>En OpenBSD, el Reader ahora utiliza arc4random_buf(3).<\/p>\n<p> <noindex><\/p>\n<p>Nueva funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Text<\/a> ahora puede generar cadenas de texto aleatorias criptogr\u00e1ficamente seguras.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa\/\">crypto\/rsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> ahora devuelve un error si se solicita una clave de menos de 1024 bits. Todos los m\u00e9todos Sign, Verify, Encrypt y Decrypt ahora devuelven un error si se utilizan con una clave de tama\u00f1o inferior a 1024 bits. Estas claves no son seguras y no deben ser utilizadas. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configuraci\u00f3n de GODEBUG<\/a> rsa1024min=0 restaura el comportamiento anterior, pero los desarrolladores de Go recomiendan hacerlo solo si es necesario y \u00fanicamente en pruebas, por ejemplo, agregando la l\u00ednea \\\/\\\/go:debug rsa1024min=0 en el archivo de prueba. Nuevo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">ejemplo<\/a> GenerateKey proporciona una clave de prueba est\u00e1ndar de 2024 bits f\u00e1cil de usar.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ahora es seguro y m\u00e1s eficiente llamar a <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> hasta <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute ahora es m\u00e1s r\u00e1pido en presencia de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, por ejemplo, al extraer una clave de JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>El paquete ahora rechaza m\u00e1s claves incorrectas, incluso cuando Validate no se llama, y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> ahora puede devolver nuevos errores para fuentes de aleatoriedad defectuosas. Los campos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> de la estructura <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> ahora se utilizan y validan incluso cuando faltan algunos valores. Tambi\u00e9n se realizaron cambios en crypto\/x509 sobre el an\u00e1lisis y extracci\u00f3n de claves RSA, descritos a continuaci\u00f3n.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> ahora admiten SHA-512\/224, SHA-512\/256 y SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> ahora utiliza un m\u00e9todo ligeramente diferente para generar la exponente privada (funci\u00f3n de Carmichael en lugar de funci\u00f3n de Euler). Aplicaciones raras que recrean claves solo a partir de n\u00fameros primos pueden producir resultados diferentes, pero compatibles.<\/p>\n<p><\/noindex> <\/p>\n<p>Las operaciones sobre claves p\u00fablicas y privadas ahora son hasta dos veces m\u00e1s r\u00e1pidas en wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: el valor devuelto por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> ahora tambi\u00e9n implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha256\/\">crypto\/sha256<\/a>: los valores devueltos por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> ahora tambi\u00e9n implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha512\/\">crypto\/sha512<\/a>: los valores devueltos por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New\">sha512.New<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New384\">sha512.New384<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_224\">sha512.New512_224<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, ahora tambi\u00e9n implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle\/\">crypto\/subtle<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nueva funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> permite al usuario ejecutar una funci\u00f3n con caracter\u00edsticas espec\u00edficas de la arquitectura que garantizan la inmutabilidad de ciertas instrucciones en relaci\u00f3n con el tiempo de los valores de los datos. Esto puede utilizarse para asegurarse de que el c\u00f3digo dise\u00f1ado para ejecutarse en tiempo constante no ha sido optimizado por caracter\u00edsticas del nivel del procesador de tal manera que funcione en tiempo variable. Actualmente, WithDataIndependentTiming utiliza el bit PSTATE.DIT en arm64 y no hace nada en todas las dem\u00e1s arquitecturas. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configuraci\u00f3n de GODEBUG<\/a> dataindependenttiming=1 activa el modo DIT en todo el programa Go.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Salida <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> debe superponerse completamente o no hacerlo en absoluto con la entrada. El comportamiento anterior era indefinido en caso contrario, mientras que ahora XORBytes generar\u00e1 un p\u00e1nico.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls\/\">crypto\/tls<\/a><\/h4>\n<p> <noindex><\/p>\n<p>El servidor TLS ahora admite Encrypted Client Hello (ECH). Esta caracter\u00edstica puede habilitarse completando el campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Un nuevo mecanismo de intercambio de claves post-cu\u00e1ntico <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> ahora es compatible y est\u00e1 habilitado por defecto cuando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> es nil. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configuraci\u00f3n de GODEBUG<\/a> tlsmlkem=0 devuelve el valor por defecto.<\/p>\n<p><\/noindex> <\/p>\n<p>Se elimin\u00f3 el soporte para el intercambio de claves experimental X25519Kyber768Draft00.<\/p>\n<p> <noindex><\/p>\n<p>El orden de intercambio de claves ahora se maneja completamente por el paquete crypto\/tls. El orden <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> ahora se ignora, y el contenido se utiliza solo para determinar qu\u00e9 intercambios de clave incluir, cuando el campo est\u00e1 completo.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Un nuevo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> enumera la lista de identificadores de extensiones recibidos en el mensaje Client Hello. Esto puede ser \u00fatil para la huella digital de clientes TLS.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509\/\">crypto\/x509<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configuraci\u00f3n de GODEBUG<\/a> x509sha1 ha sido eliminado. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certficicate.Verify<\/a> ya no admite firmas basadas en SHA-1.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> ahora implementa las interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>El campo por defecto de pol\u00edticas de certificados se ha cambiado de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. Al analizar certificados, ambos campos estar\u00e1n llenos, pero al crear pol\u00edticas de certificados se tomar\u00e1n del campo Certificate.Policies en lugar de Certificate.PolicyIdentifiers. Este cambio puede revertirse <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">con la configuraci\u00f3n GODEBUG<\/a> x509usepolicies=0.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#CreateCertificate\">CreateCertificate<\/a> ahora generar\u00e1 un n\u00famero de serie utilizando un m\u00e9todo compatible con RFC 5280 al pasar la plantilla por el campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil, en lugar de fallar.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> ahora admite la validaci\u00f3n de pol\u00edticas, como se define en RFC 5280 y RFC 9618. El nuevo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> puede establecerse en un conjunto aceptable de pol\u00edticas <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs<\/a>. Solo se devolver\u00e1n las cadenas de certificados con gr\u00e1ficos de pol\u00edticas v\u00e1lidos de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS8PrivateKey\">MarshalPKCS8PrivateKey<\/a> ahora devuelve un error en lugar de extraer una clave RSA incorrecta. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> no tiene un retorno de error y su comportamiento con claves incorrectas proporcionadas sigue siendo indefinido.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> ahora utilizan y validan los valores codificados CRT, por lo que pueden rechazar claves RSA incorrectas que anteriormente eran aceptadas. El uso de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">la configuraci\u00f3n GODEBUG<\/a> x509rsacrt=0 vuelve a calcular los valores CRT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\/\">debug\/elf<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> a\u00f1ade soporte para el manejo de versiones de s\u00edmbolos en archivos ELF (Formato Ejecutable y Enlazable). El nuevo m\u00e9todo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> devuelve una lista de versiones din\u00e1micas definidas en el archivo ELF. El nuevo m\u00e9todo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> devuelve una lista de versiones din\u00e1micas requeridas por este archivo ELF, que est\u00e1n definidas en otros objetos ELF. Finalmente, nuevos campos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> indican la versi\u00f3n del s\u00edmbolo.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/\">encoding<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Se introdujeron dos nuevas interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> para agregar la representaci\u00f3n textual o binaria de un objeto a un slice de bytes. Estas interfaces proporcionan la misma funcionalidad que <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, pero en lugar de asignar un nuevo slice cada vez, a\u00f1aden datos directamente al slice existente. Estas interfaces ahora son implementadas por tipos de la biblioteca est\u00e1ndar que ya implementan TextMarshaler y\/o BinaryMarshaler.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json\/\">encoding\/json<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Al construir, el campo de la estructura con la nueva opci\u00f3n omitzero en la etiqueta del campo se omitir\u00e1 si su valor es cero. Si el tipo de campo tiene un m\u00e9todo IsZero() bool, se usar\u00e1 para determinar si el valor es cero. De lo contrario, el valor ser\u00e1 cero si es <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">un valor nulo para su tipo<\/a>. La etiqueta de campo omitzero es m\u00e1s limpia y menos propensa a errores que omitempty cuando la intenci\u00f3n es omitir valores nulos. En particular, a diferencia de omitempty, omitzero omite los <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> valores, que son una fuente frecuente de problemas.<\/p>\n<p><\/noindex> <\/p>\n<p>Si se especifican tanto omitempty como omitzero, el campo se omitir\u00e1 si el valor est\u00e1 vac\u00edo o es nulo (o ambos a la vez).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> ahora incluye estructuras incorporadas para proporcionar mensajes de error m\u00e1s detallados.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Todas las estructuras de datos go\/types que revelan secuencias de pares de m\u00e9todos, como Len() int y At(int) T, ahora tambi\u00e9n tienen m\u00e9todos que devuelven iteradores, lo que simplifica el c\u00f3digo como este:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>Para esto:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>M\u00e9todos: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.EmbeddedTypes\">Interface.EmbeddedTypes<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.ExplicitMethods\">Interface.ExplicitMethods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.Methods\">Interface.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#MethodSet.Methods\">MethodSet.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Named.Methods\">Named.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Scope.Children\">Scope.Children<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Struct.Fields\">Struct.Fields<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Tuple.Variables\">Tuple.Variables<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeList.Types\">TypeList.Types<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeParamList.TypeParams\">TypeParamList.TypeParams<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Union.Terms\">Union.Terms<\/a><\/p>\n<p><\/noindex> <\/p>\n<h4>hash\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32\/\">hash\/adler32<\/a>: el valor devuelto por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Nuevo<\/a>, ahora tambi\u00e9n implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32\/\">hash\/crc32<\/a>: los valores devueltos por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Nuevo<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, ahora tambi\u00e9n implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64\/\">hash\/crc64<\/a>: el valor devuelto por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Nuevo<\/a>, ahora tambi\u00e9n implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv\/\">hash\/fnv<\/a>: los valores devueltos por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32\">New32<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32a\">New32a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64\">New64<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64a\">New64a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128\">New128<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, ahora tambi\u00e9n implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash\/\">hash\/maphash<\/a>: nuevas funciones <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Comparable<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> pueden calcular el hash de cualquier valor que sea comparable. Esto permite hacer hash de cualquier cosa que pueda usarse como clave en un diccionario Go.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog\/\">log\/slog<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nuevo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> es un manejador que nunca est\u00e1 habilitado y siempre descarta su salida.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">Nivel<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> ahora implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4>math\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big\/\">math\/big<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Float\">Float<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Int\">Int<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> ahora implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/\">math\/rand<\/a>: llamadas a funciones de alto nivel obsoletas <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> ya no tienen efecto. Para restaurar el comportamiento anterior se puede usar <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">la configuraci\u00f3n GODEBUG<\/a> randseednop=0. M\u00e1s contexto en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">la propuesta 67273<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2\/\">math\/rand\/v2<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#ChaCha8\">ChaCha8<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> ahora implementan la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/\">net<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#ListenConfig\">ListenConfig<\/a> ahora utiliza MPTCP por defecto en sistemas donde es compatible (actualmente solo Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> ahora implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/\">net\/http<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Se cambi\u00f3 el l\u00edmite <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> en las respuestas informativas 1xx a la solicitud. Anteriormente, esto deten\u00eda la solicitud y devolv\u00eda un error despu\u00e9s de recibir m\u00e1s de 5 respuestas 1xx. Ahora devuelve un error solo si el tama\u00f1o total de todas las respuestas 1xx excede la configuraci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Adem\u00e1s, cuando la solicitud tiene un gancho para rastrear <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, ahora no hay l\u00edmite en el n\u00famero total de respuestas 1xx. El gancho Got1xxResponse puede devolver un error para detener la solicitud.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Servidor<\/a> ahora tiene un campo HTTP2 que permite la configuraci\u00f3n de los ajustes del protocolo HTTP\/2.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Los nuevos campos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> ofrecen una forma sencilla de configurar qu\u00e9 protocolos usa el servidor o el cliente HTTP.<\/p>\n<p><\/noindex> <\/p>\n<p>El servidor y el cliente pueden configurarse para admitir conexiones HTTP\/2 sin cifrar.<\/p>\n<p> <noindex><\/p>\n<p>Cuando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> contiene UnencrypterHTTP2, el servidor aceptar\u00e1 conexiones HTTP\/2 en puertos no cifrados. El servidor puede aceptar simult\u00e1neamente HTTP\/1 y HTTP\/2 sin cifrar en el mismo puerto.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cuando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> contiene UnencryptedHTTP2 y no contiene HTTP1, el transporte utilizar\u00e1 HTTP\/2 sin cifrar para las direcciones <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Si el transporte est\u00e1 configurado para usar tanto HTTP\/1 como HTTP\/2 sin cifrado, utilizar\u00e1 HTTP\/1.<\/p>\n<p><\/noindex> <\/p>\n<p>El soporte de HTTP\/2 sin cifrado utiliza \"HTTP\/2 con conocimiento previo\" (RFC 9113, secci\u00f3n 3.3). El encabezado obsoleto \"Upgrade: h2c\" no es compatible.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip\/\">net\/netip<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Addr\">Addr<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#AddrPort\">AddrPort<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefix<\/a> ahora implementan interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url\/\">net\/url<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url#URL\">URL<\/a> ahora tambi\u00e9n implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user\/\">os\/user<\/a><\/h4>\n<p> <noindex><\/p>\n<p>En Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Actual<\/a> ahora puede ser utilizado en Windows Nano Server. La implementaci\u00f3n fue actualizada para evitar el uso de funciones de la biblioteca NetApi32, que no est\u00e1 disponible en Nano Server.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>En Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Actual<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> ahora soportan las siguientes cuentas de servicio integradas:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>NT AUTHORITYSYSTEM<\/li>\n<li>NT AUTHORITYLOCAL SERVICE<\/li>\n<li>NT AUTHORITYNETWORK SERVICE<\/li>\n<\/ul>\n<p> <noindex><\/p>\n<p>En Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Actual<\/a> se ha acelerado significativamente cuando el usuario actual est\u00e1 conectado a un dominio lento, lo cual es com\u00fan para muchos usuarios corporativos. El nuevo rendimiento de la implementaci\u00f3n ahora es del orden de milisegundos, en comparaci\u00f3n con la implementaci\u00f3n anterior, que pod\u00eda llevar varios segundos, incluso minutos, en completarse.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>En Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Actual<\/a> ahora devuelve al usuario propietario del proceso, cuando el hilo actual se hace pasar por otro usuario. Anteriormente, esto devolv\u00eda un error.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp\/\">regexp<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp#Regexp\">Regexp<\/a> ahora implementa la interfaz <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAdapter<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/\">runtime<\/a><\/h4>\n<p> <noindex><\/p>\n<p>La funci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> ahora est\u00e1 declarada obsoleta. En el nuevo c\u00f3digo se debe preferir el uso de la ruta del sistema para determinar el binario \"go\", y usar go env GOROOT para determinar GOROOT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\/\">strings<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Paquete <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> agrega varias funciones para trabajar con iteradores:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> devuelve un iterador para las l\u00edneas separadas por nueva l\u00ednea en la cadena.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> devuelve un iterador para todas las subcadenas de la cadena, separadas por el separador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> devuelve un iterador para las subcadenas de la cadena, separadas despu\u00e9s de cada aparici\u00f3n del separador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> devuelve un iterador para las subcadenas de la cadena alrededor de secuencias de caracteres de espacio, tal como se define<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsFuncSeq\">FieldsFuncSeq<\/a> devuelve un iterador para las subcadenas de la cadena alrededor de secuencias de puntos de c\u00f3digo Unicode que cumplen con el predicado.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">sync<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Implementaci\u00f3n <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> fue modificada, mejorando el rendimiento, especialmente para cambios en el diccionario. Por ejemplo, es menos probable que haya competencia por cambios en conjuntos no superpuestos en diccionarios grandes, y ya no se requiere tiempo de acumulaci\u00f3n para lograr un diccionario de baja competencia.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Si encuentras alg\u00fan problema, establece GOEXPERIMENT=nosynchashtriemap al compilar para volver a la implementaci\u00f3n anterior y, por favor, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">completa el formulario de problemas<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/\">testing<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nuevos m\u00e9todos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> devuelven el contexto que se cancela al finalizar la prueba y antes de ejecutar las funciones de limpieza de la prueba.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nuevos m\u00e9todos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> se pueden utilizar para cambiar el directorio de trabajo durante la ejecuci\u00f3n de la prueba o el benchmark.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>Las plantillas ahora soportan range-over-func y range-over-int.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\/\">time<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">Tiempo<\/a> ahora implementa las interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> y <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Puertos<\/h2>\n<h3>Linux<\/h3>\n<p> <noindex><\/p>\n<p>Como fue <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">que<\/a> en las notas de la versi\u00f3n Go 1.23, Go 1.24 requiere el n\u00facleo de Linux versi\u00f3n 3.2 o superior.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>Go 1.24 es la \u00faltima versi\u00f3n que funcionar\u00e1 en macOS 11 Big Sur. Go 1.25 requerir\u00e1 macOS 12 Monterey o superior.<\/p>\n<h3>WebAssembly<\/h3>\n<p>La directiva del compilador go:wasmexport se ha a\u00f1adido a los programas Go para exportar funciones al host de WebAssembly.<\/p>\n<p> <noindex><\/p>\n<p>En la Vista Previa de la Interfaz del Sistema WebAssembly 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 soporta la compilaci\u00f3n de programas Go como <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> a trav\u00e9s de la especificaci\u00f3n del flag de compilaci\u00f3n -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>M\u00e1s tipos ahora est\u00e1n permitidos como tipo de argumento o resultado para las funciones go:wasmimport. En particular, bool, string, uintptr y punteros a ciertos tipos son permitidos (los detalles se pueden ver en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">la documentaci\u00f3n<\/a>), junto con tipos de enteros de 32 y 64 bits y de punto flotante, y unsafe.Pointer, que ya est\u00e1n permitidos. Estos tipos tambi\u00e9n est\u00e1n permitidos como tipos de argumento o resultado para las funciones go:wasmexport.<\/p>\n<p><\/noindex> <\/p>\n<p>Los archivos de soporte para WebAssembly se han movido a lib\/wasm desde misc\/wasm.<\/p>\n<p>El tama\u00f1o de memoria original se ha reducido significativamente, especialmente para aplicaciones peque\u00f1as de WebAssembly.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>El puerto windows\/arm de 32 bits (GOOS=windows GOARCH=arm) ha sido marcado como roto. Los detalles en <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>Fuente: <a \ncontent=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/news\/development\/17884044\">linux.org.ru<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u043e\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u044f\u0437\u044b\u043a\u0430 Go, \u0432\u0435\u0440\u0441\u0438\u044f 1.24, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 Go 1.23. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0440\u0435\u043b\u0438\u0437 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 Go 1. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Go \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 Go 1.24 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0430\u043b\u0438\u0430\u0441\u044b \u0442\u0438\u043f\u043e\u0432: \u0430\u043b\u0438\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":121951,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-121950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/news\/go-1-24\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Go 1.24 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/news\/go-1-24\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Go 1.24 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Go 1.24 | ProHoster","og:url":"https:\/\/prohoster.info\/es\/blog\/news\/go-1-24","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2025-02-15T12:22:29+00:00","article:modified_time":"2025-02-15T12:22:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"121950","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 10:38:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 10:38:20","updated":"2026-01-23 10:38:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}