Ir a 1.24

Ir a 1.24

Una nueva versión del lenguaje Go, la versión 1.24, llega seis meses después Ir a 1.23. La mayoría de los cambios están en la implementación de la cadena de herramientas, el tiempo de ejecución y las bibliotecas. Como siempre, el comunicado proporciona Promesa de compatibilidad 1. Los diseñadores del lenguaje esperan que casi todos los programas Go continúen compilándose y ejecutándose como antes.

Cambios en el idioma

Go 1.24 ahora es totalmente compatible alias de tipo genérico:un alias de tipo se puede parametrizar como un tipo declarado. Detalles en especificaciones del idioma. Por ahora, esta función se puede desactivar configurando GOEXPERIMENT=noaliastypeparams; Sin embargo, la opción aliastypeparams se eliminará en Go 1.25.

Instrumentos

Comando ir

Los módulos Go ahora pueden rastrear dependencias ejecutables utilizando la directiva de herramientas en go.mod. Esto elimina la necesidad de la solución alternativa anterior de agregar herramientas como importaciones vacías en un archivo normalmente llamado “tools.go”. El comando de la herramienta Go ahora puede ejecutar estas herramientas además de las herramientas que vienen con Go. Puede encontrar más información en documentación.

La nueva bandera -tool para go get hace que se agreguen directivas de herramientas al módulo actual para los paquetes especificados además de agregar directivas require.

nuevo herramienta de metapatrones se refiere a todas las herramientas en el módulo actual. Esto se puede usar para actualizarlos todos a través de la herramienta go get, o para instalarlos en el directorio GOBIN a través de la herramienta go install.

Los ejecutables creados a través de go run y el nuevo comportamiento de la herramienta go ahora se almacenan en caché en el caché de compilación de Go. Esto hace posible que se realicen lanzamientos repetidos gracias al aumento de caché. #69290.

Los comandos go build y go install ahora aceptan el indicador -json, que informa la salida de la compilación y los errores como salida JSON estructurada en la salida estándar. Los detalles del formato se pueden ver en go help buildjson.

Además, go test -json ahora informa los errores de salida y compilación en JSON, mezclados con el resultado de la prueba JSON. Se pueden distinguir por los nuevos tipos de acción, pero si causan problemas en el sistema de integración de pruebas, puede volver a la salida de texto de la compilación a través de Configuración de GODEBUG gotestjsonbuildtext=1.

La nueva variable de entorno GOAUTH proporciona una forma flexible de autorizar extracciones de módulos privados. Puede ver los detalles en go help goauth.

El comando go build ya está instalado versión del módulo principal en el binario compilado, en función de una etiqueta y/o una confirmación de control de versión. Se agregará el sufijo +dirty si hay cambios no confirmados. El indicador -buildvcs=false se puede utilizar para omitir la información de control de versión del binario.

nuevo Configuración de GODEBUG cadena de herramientas trace=1 Ahora se puede utilizar para rastrear el proceso de selección de la cadena de herramientas en el comando go.

Cgo

Cgo admite nuevas anotaciones para funciones C para mejorar el rendimiento en tiempo de ejecución. #cgo noescape cFunctionName le dice al compilador que la memoria pasada a la función C cFunctionName no está escapada. #cgo nocallback cFunctionName le dice al compilador que la función C cFunctionName no llama a ninguna función Go. Puede encontrar más información en documentación cgo.

Actualmente, Cgo se niega a compilar llamadas a una función C que tenga múltiples declaraciones incompatibles. Por ejemplo, si f se declara como void f(int) y void f(double), cgo informará un error en lugar de posiblemente generar una secuencia de llamada no válida f(0). Una novedad en esta versión es la detección mejorada de esta condición de error cuando aparecen declaraciones incompatibles en archivos diferentes. #67699.

volcado de objetos

La herramienta objdump ahora admite el desensamblaje en LoongArch de 64 bits (GOARCH=loong64), RISC-V (GOARCH=riscv64) y S390X (GOARCH=s390x).

Grasa

El nuevo analizador de pruebas informa errores comunes en declaraciones de pruebas, análisis de errores, evaluaciones comparativas y ejemplos en suites de pruebas, como nombres mal formados, firmas no válidas o ejemplos que documentan identificadores inexistentes. Algunos de estos errores pueden provocar que las pruebas fallen.

El analizador printf existente ahora informa diagnósticos para llamadas del formato fmt.Printf(s), donde s es una cadena de formato no constante sin otros argumentos. Estas llamadas casi siempre son un error, ya que el valor de s puede contener el carácter %; Utilice fmt.Print en su lugar. 60529. Esta verificación tiende a encontrar cosas en el código existente y, por lo tanto, solo se aplica cuando la versión del lenguaje (como se especifica en la directiva go del archivo go.mod o en los comentarios `//go:build`) es al menos Go 1.24, para evitar causar largas interrupciones en la integración al actualizar a la cadena de herramientas Go 1.24.

El analizador de etiquetas de compilación existente ahora informa diagnósticos cuando hay una etiqueta de compilación incorrecta Limitación de compilación de versiones anteriores Vaya a la directiva //go:build. Por ejemplo, //go:build go1.23.1 se refiere a una versión puntual; En su lugar utilice //go:build go1.23. #64127.

El analizador de copylock existente ahora informa un diagnóstico cuando se declara una variable en un bucle triple "for", como for i := iter(); hecho(yo); i = next(i) { … }, contiene sync.Locker, como sync.Mutex. Ir a 1.22 cambió el comportamiento de dichos bucles para crear una nueva variable para cada iteración, copiando los valores de la iteración anterior; Esta copia no es segura para las cerraduras. #66387.

Programa de GoCache

El mecanismo interno de almacenamiento en caché binario y de pruebas de cmd/go ahora se puede implementar mediante procesos secundarios que implementan un protocolo JSON entre la herramienta cmd/go y el proceso secundario nombrado por la variable de entorno GOCACHEPROG. Anteriormente era para GOEXPERIMENT. Los detalles del protocolo se pueden ver en documentación.

Tiempo de finalización

Varias mejoras en el rendimiento en tiempo de ejecución redujeron la sobrecarga de la CPU en un 2-3% en promedio en un conjunto de puntos de referencia representativos. Los resultados pueden variar según la aplicación. Estas mejoras incluyen una nueva implementación de mapas incorporada basada en Mesas suecas, una asignación más eficiente de memoria de objetos pequeños y una nueva implementación interna en tiempo de ejecución del mutex.

La nueva implementación de mapa incorporada y el nuevo mutex de tiempo de ejecución interno se pueden deshabilitar configurando GOEXPERIMENT=noswissmap y GOEXPERIMENT=nospinbitmutex en el momento de la compilación, respectivamente.

Compilador

El compilador ya prohibía definir nuevos métodos con tipos de receptores generados por cgo, pero era posible evitar esta restricción mediante un alias de tipo. Go 1.24 ahora siempre informa un error si el receptor denota un tipo generado por cgo, ya sea directa o indirectamente (a través de un alias de tipo).

Enlazador

El enlazador ahora genera un identificador de compilación GNU (entrada ELF NT_GNU_BUILD_ID) en plataformas ELF y un UUID (comando de carga Mach-O LC_UUID) en macOS de forma predeterminada. El ID de compilación o UUID se deriva del ID de compilación de Go. Esto se puede desactivar con el indicador de enlace -B none o anular con el indicador de enlace -B 0xNNNN con un valor hexadecimal especificado por el usuario.

Promoción

Como se indica en Notas de la versión 1.22 de Go, Go 1.24 ahora requiere tener instalado Go 1.22.6 o posterior. Los desarrolladores esperan que para implementar Go 1.26 sea necesario un lanzamiento puntual de Go 1.24 o posterior.

Biblioteca estándar

Acceso al sistema de archivos restringido al directorio

Nuevo tipo sistema operativo raíz Proporciona la capacidad de realizar operaciones del sistema de archivos dentro de un directorio específico.

Función sistema operativo OpenRoot abre el directorio y regresa sistema operativo raíz. Métodos sobre sistema operativo raíz operar en ese directorio y no permitir que las rutas hagan referencia a ubicaciones fuera del directorio, incluidas aquellas que siguen enlaces simbólicos fuera del directorio. Los métodos en os.Root reflejan la mayoría de las operaciones del sistema de archivos disponibles en el paquete os, incluidos, por ejemplo, sistema operativo.Root.Abrir, os.Root.Crear, sistema operativo.Root.Mkdir и Estado raíz del sistema operativo.

Nueva función de referencia

Los puntos de referencia ahora pueden utilizar un método más rápido y menos propenso a errores Prueba.B.Loop iterar sobre un punto de referencia como para b.Loop() { … } en lugar de las estructuras de bucle típicas que involucran bN como para el rango bN Esto ofrece dos ventajas significativas:

  • La función de referencia se ejecuta exactamente una vez por recuento, por lo que los costosos pasos de configuración y limpieza solo se realizan una vez.
  • Los parámetros y resultados de la llamada de función continúan vivos, lo que impide que el compilador optimice por completo el cuerpo del bucle.

Finalizadores mejorados

Nueva caracteristica tiempo de ejecución.AddCleanup es un mecanismo de finalización más flexible, más eficiente y menos propenso a errores que tiempo de ejecución.SetFinalizer. AddCleanup adjunta una función de limpieza a un objeto que se ejecutará tan pronto como el objeto deje de estar disponible. Sin embargo, a diferencia de SetFinalizer, se pueden asociar múltiples limpiezas a un solo objeto, las limpiezas se pueden asociar a punteros internos, las limpiezas normalmente no causan fugas cuando los objetos forman un ciclo y las limpiezas no retrasan la desasignación del objeto o los objetos a los que apunta. El nuevo código debería preferir AddCleanup sobre SetFinalizer.

Nuevo paquete débil

Nuevo paquete débil Proporciona indicadores débiles.

Los punteros débiles son un primitivo de bajo nivel proporcionado para crear estructuras que hacen un uso eficiente de la memoria, como diccionarios débiles para mapear valores y diccionarios de canonización para cualquier cosa que no esté cubierta por un paquete. únicoy varios tipos de cachés. Para respaldar estos casos de uso, esta versión también proporciona tiempo de ejecución.AddCleanup и maphash.Comparable.

Nuevo paquete crypto/mlkem

Nuevo paquete cripto/mlkem Implementa ML-KEM-768 y ML-KEM-1024.

ML-KEM es un mecanismo de intercambio de claves postcuántico, anteriormente conocido como Kyber y especificado en FIP 203.

Nuevos paquetes crypto/hkdf, crypto/pbkdf2 y crypto/sha3

Nuevo paquete cripto/hkdf implementa la función de derivación de claves “Extraer y expandir” basada en HMAC HKDF como se define en RFC 5869.

Nuevo paquete criptografía/pbkdf2 implementa la función de derivación de clave basada en contraseña PBKDF2 como se define en RFC 8018.

Nuevo paquete criptografía/sha3 implementa la función hash SHA-3 y las funciones de salida extensibles SHAKE y cSHAKE como se define en FIP 202.

Los tres paquetes se basan en los paquetes existentes golang.org/x/crypto/…

Cumplimiento de la norma FIPS 140-3

Esta versión incluye Un nuevo conjunto de mecanismos para garantizar el cumplimiento de la norma FIPS 140-3.

El módulo criptográfico Go es un conjunto de paquetes de biblioteca estándar interna que se utilizan de forma transparente para implementar algoritmos aprobados por FIPS 140-3. Las aplicaciones no requieren cambios para utilizar el módulo criptográfico Go para algoritmos aprobados.

La nueva variable de entorno GOFIPS140 se puede utilizar para seleccionar la versión del módulo criptográfico Go que se utilizará en una compilación. Nuevo Configuración de GODEBUG fips140 se puede utilizar para habilitar el modo FIPS 140-3 en tiempo de ejecución.

Go 1.24 incluye el módulo criptográfico Go v1.0.0, que actualmente se está probando en un laboratorio acreditado por CMVP.

Nuevo paquete experimental testing/synctest

Nuevo paquete experimental Prueba/prueba de sincronización Proporciona soporte para probar código simultáneo.

Los detalles se pueden encontrar en la documentación del paquete.

El paquete synctest es experimental y debe habilitarse configurando GOEXPERIMENT=synctest. La API del paquete puede cambiar en futuras versiones. EN #67434 Puede ver más detalles y brindar comentarios.

Cambios menores en la biblioteca

Archivo

Las implementaciones de (*Writer.AddFS) en archive/zip y archive/tar ahora escriben el encabezado del directorio para un directorio vacío.

bytes

Paquete bytes agrega varias funciones que trabajan con iteradores:

  • Líneas Devuelve un iterador sobre cadenas separadas por nuevas líneas en una porción de bytes.
  • Secuencia dividida devuelve un iterador sobre todas las subsecciones de una porción de byte separadas por un separador.
  • Dividir después de secuencia devuelve un iterador sobre las subsecciones de una porción de byte, dividida después de cada aparición del separador.
  • CamposSeq devuelve un iterador sobre subsecciones de una porción de byte alrededor de secuencias de caracteres de espacio, como se define Unicode.IsSpace (Espacio)
  • CamposFuncSeq devuelve un iterador sobre subsecciones de una porción de byte alrededor de secuencias de puntos de código Unicode que satisfacen un predicado.

cripto/aes

Valor de retorno Nuevo Chiper ya no implementa los métodos NewCTR, NewGCM, NewCBCEncrypter y NewCBCDecrypter. Estos métodos no estaban documentados y no estaban disponibles en todas las arquitecturas. Ahora el significado Bloquear Debe pasarse directamente a las funciones apropiadas. cripto/cifrado. Actualmente, crypto/cipher aún verifica estos métodos en valores de bloque, aunque ya no son compatibles con la biblioteca estándar.

cripto/cifrado

Nueva caracteristica NuevoGCMWithRandomNonce devuelve AEAD, que implementa AES-GCM generando un nonce aleatorio durante Seal y anteponiéndolo al texto cifrado.

implementación Transmite, devuelto Nuevo CTR cuando se usa con cripto/aes Ahora varias veces más rápido en amd64 y arm64.

Nuevo OFB, Nuevo CFBEncrypter и Nuevo CFBDescifrador ahora se declaran obsoletos. Los modos OFB y CFB no están autenticados, lo que generalmente permite que ataques activos manipulen y recuperen texto sin formato. Se recomienda que las aplicaciones utilicen AEAD en cambio. Si está en modo no autenticado Transmite necesario, se puede utilizar Nuevo CTR en lugar de.

cripto/ecdsa

Clave privada.Sign Ahora crea una firma determinista de acuerdo con RFC 6979, si la fuente de aleatoriedad es nula.

criptografía/md5

Valor de retorno md5.nuevo, ahora también implementa la interfaz codificación.binaryappender.

criptomoneda/rand

Función Leer Ahora no garantiza fallos. Si Read encuentra un error durante la lectura Testimoniales, el programa finalizará de forma permanente. Tenga en cuenta que está documentado que el Lector predeterminado siempre funciona correctamente, por lo que este cambio solo debería afectar a los programas que anulan la variable Lector. Una excepción son los kernels de Linux anteriores a 3.17, donde el lector predeterminado todavía abre /dev/urandom y puede fallar.

En Linux 6.11 y versiones posteriores, Reader ahora utiliza la llamada del sistema getrandom a través de vDSO. Esto es varias veces más rápido, generalmente para lecturas pequeñas.

En OpenBSD Reader ahora se utiliza arc4random_buf(3).

Nueva caracteristica Texto Ahora puede generar cadenas de texto aleatorias criptográficamente seguras.

cripto/rsa

Generar clave Ahora devuelve un error si se solicita una longitud de clave inferior a 1024 bits. Todos los métodos de Firmar, Verificar, Cifrar y Descifrar ahora devuelven un error si se utilizan con un tamaño de clave menor a 1024 bits. Estas claves no son seguras y no deben utilizarse. Configuración de GODEBUG rsa1024min=0 restaura el comportamiento anterior, pero los desarrolladores de Go recomiendan hacerlo solo cuando sea necesario y solo en pruebas, por ejemplo, agregando la línea //go:debug rsa1024min=0 al archivo de prueba. Nuevo ejemplo GenerateKey proporciona una clave de prueba estándar de 2024 bits fácil de usar.

Ahora es más seguro y eficiente llamar Clave privada.Precomputación a Clave privada.Validar. El precálculo ahora es más rápido en presencia de datos parcialmente llenos. Valores precalculados, por ejemplo, al extraer una clave de JSON.

El paquete ahora rechaza más claves no válidas incluso cuando no se llama a Validate, y Generar clave Ahora puede devolver nuevos errores para fuentes de aleatoriedad rotas. Campos Primes и Precalculado la estructura PrivateKey Ahora se utilizan y validan incluso cuando faltan algunos valores. También hay cambios en crypto/x509 para analizar y extraer claves RSA, que se describen a continuación.

FirmaPKCS1v15 и Verificar PKCS1v15 Ahora admite SHA-512/224, SHA-512/256 y SHA-3.

Generar clave ahora utiliza un método ligeramente diferente para generar el exponente privado (función de Carmichael en lugar de la función de Euler). Las aplicaciones raras que regeneran claves externamente solo a partir de números primos pueden producir resultados diferentes pero compatibles.

Las operaciones en claves públicas y privadas ahora son hasta dos veces más rápidas en wasm.

cripto/sha*

cripto/sutil

Nueva caracteristica Con sincronización independiente de datos permite al usuario ejecutar una función con características específicas de la arquitectura habilitadas que garantizan que ciertas instrucciones no se modifiquen en relación con el tiempo del valor de los datos. Esto se puede usar para garantizar que el código escrito para ejecutarse en tiempo constante no haya sido optimizado por funciones a nivel de procesador para que se ejecute en tiempo variable. Actualmente, WithDataIndependentTiming utiliza el bit PSTATE.DIT en arm64 y no hace nada en todas las demás arquitecturas. Configuración de GODEBUG dataindependenttiming=1 habilita el modo DIT para todo el programa Go.

conclusión Bytes XOR debe superponerse completamente o no superponerse en absoluto con la entrada. Anteriormente, el comportamiento no estaba definido de otra manera, mientras que ahora XORBytes entrará en pánico.

cripto / tls

El servidor TLS ahora admite Encrypted Client Hello (ECH). Esta función se puede habilitar completando el campo. Configuración.EncryptedClientHelloKeys.

Un nuevo mecanismo de intercambio de claves post-cuántico X25519MLKEM768 Ahora compatible y habilitado de forma predeterminada cuando Configuración.CurvePreferences es nulo Configuración de GODEBUG tlsmlkem=0 devuelve el valor predeterminado.

Se ha eliminado el soporte para el intercambio de claves experimental X25519Kyber768Draft00.

La orden de intercambio de claves ahora se gestiona completamente mediante el paquete crypto/tls. Orden Configuración.CurvePreferences ahora se ignora y el contenido solo se usa para determinar qué intercambios de claves incluir cuando se completa el campo.

Nuevo campo Extensiones de ClientHelloInfo Enumera la lista de identificadores de extensión recibidos en el mensaje Client Hello. Esto puede ser útil para identificar clientes TLS.

criptografía/x509

Configuración de GODEBUG Se ha eliminado x509sha1. Certificación.Verificar ya no admite firmas basadas en SHA-1.

OID ahora implementa interfaces codificación.binaryappender и Codificación.TextAppender.

El campo de política de certificado predeterminado se ha cambiado de Certificado.Identificadores de políticas en Certificado.Políticas. Al analizar certificados, se completarán ambos campos, pero al crear una política de certificado, se tomarán del campo Certificate.Policies en lugar de Certificate.PolicyIdentifiers. Este cambio se puede revertir. Configuración de GODEBUG x509usepolicies=0.

Crear certificado Ahora generará un número de serie utilizando un método compatible con RFC 5280 al pasar un campo de plantilla Certificado.Número de serie nulo, en lugar de estrellarse.

Certificado.Verificar Ahora admite la validación de políticas según se define en RFC 5280 y RFC 9618. Nuevo campo VerificarOpciones.Políticas de Certificado se puede establecer un conjunto aceptable de políticas OID. Solo se devolverán cadenas de certificados con gráficos de políticas válidos. Certificado.Verificar.

Clave privada MarshalPKCS8 ahora devuelve un error en lugar de recuperar una clave RSA no válida. (Clave privada MarshalPKCS1 no tiene retorno de error y su comportamiento cuando se proporcionan claves no válidas permanece indefinido).

Analizar clave privada PKCS1 и Analizar clave privada PKCS8 Ahora se utilizan y validan valores CRT codificados, por lo que se pueden rechazar claves RSA no válidas que se aceptaron anteriormente. Uso Configuración de GODEBUG x509rsacrt=0 vuelve al recálculo de los valores CRT.

depuración/elfo

Paquete depuración/elfo Agrega soporte para manejar versiones de símbolos en archivos ELF (formato ejecutable y vinculable) dinámicos. Nuevo método Archivo.DynamicVersions Devuelve una lista de versiones dinámicas definidas en un archivo ELF. Nuevo método Archivo.DynamicVersionNeeds Devuelve una lista de versiones dinámicas requeridas por este archivo ELF que están definidas en otros objetos ELF. Por fin, nuevos campos Símbolo.HasVersion и Símbolo.VersiónIndex indicar la versión del símbolo.

codificación

Dos nuevas interfaces Agregador de texto и Añadidor binario Se introdujeron para agregar una representación de texto o binaria de un objeto a una porción de bytes. Estas interfaces proporcionan la misma funcionalidad que TextoMarshaler и Mariscal binario, pero en lugar de asignar una nueva porción cada vez, agregan datos directamente a una porción existente. Estas interfaces están implementadas actualmente por tipos de biblioteca estándar que ya implementan TextMarshaler y/o BinaryMarshaler.

codificación/json

Al construir, se omitirá un campo de estructura con la nueva opción omitzero en la etiqueta del campo de estructura si su valor es cero. Si el tipo de campo tiene un método bool IsZero(), se utilizará para determinar si el valor es cero. De lo contrario, el valor será cero si valor nulo para su tipo. La etiqueta de campo omitzero es más limpia y menos propensa a errores que omitempty cuando la intención es omitir valores nulos. En particular, a diferencia de omitempty, omitzero omite los ceros. tiempo.tiempo valores, lo cual es una fuente común de problemas.

Si se especifican tanto omitempty como omitzero, el campo se omitirá si el valor está vacío o es cero (o ambos).

Error de tipo de anulación de serialización.Campo Ahora incluye estructuras integradas para proporcionar mensajes de error más detallados.

ir/tipos

Todas las estructuras de datos go/types que exponen secuencias de pares de métodos, como Len() int y At(int) T, ahora también tienen métodos que devuelven iteradores, lo que permite un código más simple como este:

params := fn.Tipo.(*tipos.Firma).Params() para i := 0; i < parámetros.Len(); i++ { uso(params.At(i)) }

En este:

para param := rango fn.Firma().Parámetros().Variables() { use(param) }

Методы: Interfaz.EmbeddedTypes Interfaz.Métodos explícitos Interfaz.Métodos Conjunto de métodos.Métodos Métodos con nombre Alcance.Niños Estructura.Campos Tupla.Variables Lista de tipos.Tipos Lista de tipos de parámetros.TypeParams Unión.Términos

picadillo/*

registro/log

nuevo Manejador de descartes es un controlador que nunca se habilita y siempre descarta su salida.

Nivel и NivelVar Ahora implementa la interfaz Codificación.TextAppender.

matemáticas/*

red

EscucharCondig Ahora utiliza MPTCP de forma predeterminada en los sistemas donde es compatible (actualmente solo Linux).

IP ahora implementa la interfaz Codificación.TextAppender.

net / http

La restricción ha cambiado Transporte a las 1xx respuestas de información recibidas en respuesta a la solicitud. Anteriormente, esto detendría la solicitud y devolvería un error después de recibir más de 5 respuestas 1xx. Esto ahora solo devuelve un error si el tamaño total de todas las respuestas 1xx excede la configuración Transporte.MaxResponseHeaderBytes.

Además, cuando una solicitud tiene un gancho de seguimiento net/http/httptrace.ClientTrace.Got1xxResponse, ahora no hay límite en el número total de respuestas 1xx. El gancho Got1xxResponse puede devolver un error para detener la solicitud.

Transporte и Server Ahora tenemos un campo HTTP2 que permite la configuración de los ajustes del protocolo HTTP/2.

Nuevos campos Protocolos del servidor и Protocolos de transporte Proporciona una forma sencilla de configurar qué protocolos HTTP utiliza el servidor o el cliente.

El servidor y el cliente se pueden configurar para admitir conexiones HTTP/2 sin cifrar.

¿Cuándo Protocolos del servidor contiene UnencrypterHTTP2, el servidor aceptará conexiones HTTP/2 en puertos no cifrados. El servidor puede aceptar HTTP/1 y HTTP/2 sin cifrar en el mismo puerto.

¿Cuándo Protocolos de transporte contiene UnencryptedHTTP2 y no contiene HTTP1, el transporte utilizará HTTP/2 sin cifrar para las direcciones http://. Si un transporte está configurado para utilizar HTTP/1 y HTTP/2 sin cifrar, utilizará HTTP/1.

El soporte para HTTP/2 sin cifrar utiliza "HTTP/2 con aprendizaje avanzado" (RFC 9113, sección 3.3). El encabezado obsoleto “Upgrade: h2c” no es compatible.

red/netip

Addr, Puerto de dirección и Prefijo Ahora implementa interfaces codificación.binaryappender и Codificación.TextAppender.

red/url

URL Ahora también implementa la interfaz codificación.binaryappender.

sistema operativo/usuario

En Windows Current Ahora se puede utilizar en Windows Nano Server. Se ha actualizado la implementación para evitar el uso de funciones de la biblioteca NetApi32, que falta en Nano Server.

En Windows Current, Buscar и ID de búsqueda Ahora admite las siguientes cuentas de servicio de usuario integradas:

  • SISTEMA DE AUTORIDAD DEL NT
  • SERVICIO LOCAL DE LA AUTORIDAD DEL NT
  • SERVICIO DE RED DE AUTORIDAD DE NT

En Windows Current Se aceleró significativamente cuando el usuario actual se unió a un dominio lento, lo que es un caso común para muchos usuarios corporativos. El rendimiento de la nueva implementación ahora es del orden de milisegundos, en comparación con la implementación anterior, que podía tardar varios segundos, incluso minutos, en completarse.

En Windows Current ahora devuelve el usuario propietario del proceso cuando el hilo actual se hace pasar por otro usuario. Anteriormente esto devolvía un error.

regexp

expresión regular ahora implementa la interfaz Codificación.TextAdapter.

tiempo de ejecución

Función GORO ahora está obsoleto. En entornos más nuevos, es preferible utilizar la ruta del sistema para determinar el binario "go" y utilizar go env GOROOT para determinar GOROOT.

instrumentos de cuerda

Paquete instrumentos de cuerda agrega varias funciones para trabajar con iteradores:

  • Líneas Devuelve un iterador sobre líneas separadas por nuevas líneas en una cadena.
  • Secuencia dividida devuelve un iterador sobre todas las subcadenas de una cadena separadas por un separador.
  • Dividir después de secuencia devuelve un iterador sobre subcadenas de una cadena, dividido después de cada aparición del separador.
  • CamposSeq devuelve un iterador sobre subcadenas de una cadena alrededor de secuencias de caracteres de espacio en blanco, como se defineUnicode.IsSpace (Espacio)
  • CamposFuncSeq Devuelve un iterador sobre subcadenas de cadena alrededor de secuencias de puntos de código Unicode que satisfacen un predicado.

sincronizar

implementación mapa de sincronización Se ha modificado para mejorar el rendimiento, especialmente para los cambios de diccionario. Por ejemplo, la contención por cambio de conjunto disjunto es menos probable en diccionarios grandes, y ya no requiere tiempo de acumulación para lograr una carga de diccionario de baja contención.

Si encuentra algún problema, configure GOEXPERIMENT=nosynchashtriemap durante la compilación para volver a la implementación anterior y Rellene el formulario de problemas.

las pruebas

Nuevos métodos T.Context и B. Contexto devuelve un contexto que se descarta después de que se completa la prueba y antes de que se ejecuten las funciones de limpieza de prueba.

Nuevos métodos T. Chdir и B. Chdir se puede utilizar para cambiar el directorio de trabajo durante la duración de una prueba o evaluación comparativa.

texto/plantilla

Las plantillas ahora admiten rango sobre función y rango sobre int.

time

Hora ahora implementa interfaces codificación.binaryappender и Codificación.TextAppender.

Puertos

Linux

Como era anunciado Según las notas de la versión de Go 1.23, Go 1.24 requiere la versión 3.2 o posterior del kernel de Linux.

Darwin

Go 1.24 es la última versión que se ejecutará en macOS 11 Big Sur. Go 1.25 requerirá macOS 12 Monterey o posterior.

WebAssembly

Se ha agregado la directiva del compilador go:wasmexport a los programas Go para exportar funciones al host WebAssembly.

En la versión preliminar 1 de la interfaz del sistema WebAssembly (GOOS=wasip1 GOARCH=wasm), Go 1.24 admite la creación de un programa Go como reactor/biblioteca especificando el indicador de compilación -buildmode=c-shared.

Ahora se permiten más tipos como tipos de argumentos o resultados para las funciones go:wasmimport. En particular, se permiten bool, string, uintptr y punteros a ciertos tipos (ver detalles en documentación), junto con los tipos enteros y de punto flotante de 32 bits y 64 bits, y unsafe.Pointer, que ya están permitidos. Estos tipos también se permiten como tipos de argumentos o resultados para las funciones go:wasmexport.

Los archivos de soporte para WebAssembly se han movido a lib/wasm desde misc/wasm.

La huella de memoria inicial se reduce significativamente, especialmente para pequeñas aplicaciones WebAssembly.

Windows

El puerto Windows/ARM de 32 bits (GOOS=windows GOARCH=arm) ha sido marcado como roto. Detalles en #70705

Fuente: linux.org.ru

Añadir un comentario