Registro de Actualizaciones de Go
Versiones en mantenimiento:
- go1.25, primera versión: 2025-08-12, última actualización: go1.25.0 (2025-08-12)
- go1.24, primera versión: 2025-02-11, última actualización: go1.24.6 (2024-08-06)
Registro oficial de actualizaciones del lenguaje Go: Release History - The Go Programming Language
Go oficialmente usa versionado semántico para identificar versiones, con el formato vversión principal.versión secundaria.versión de parche (ver Semantic Versioning). La actualización de la versión principal significa que ha ocurrido un Breaking Change, es decir, una actualización no compatible con versiones anteriores. La actualización de la versión secundaria significa que se han agregado nuevas funciones manteniendo la compatibilidad hacia atrás. La actualización de la versión de parche significa que se han solucionado problemas manteniendo la compatibilidad hacia atrás.
El equipo de Go publica una versión secundaria cada seis meses, y solo las dos últimas versiones secundarias tienen soporte a largo plazo, con un período de mantenimiento de seis meses cada una. Dado que Go mantiene una compatibilidad bastante alta en cada actualización, se recomienda actualizar Go a la última versión después de que la nueva versión sea estable.
La última vez que se propuso un borrador de Go2.0 fue el 19 de noviembre de 2018, cuando estaba en la versión go1.13. Cinco años después, la versión ha iterado hasta go1.21. Las diversas ideas de Go2.0 se han reflejado en Go1.0 a través de actualizaciones incrementales. Uno de los fundados también declaró explícitamente que es posible que no haya un Go2.0 en el futuro, y que Go siempre se esforzará por mantener la compatibilidad hacia atrás (ver Go 1 and the Future of Go Programs).
Consejo
Esta página es solo una simple traducción del registro oficial, se actualiza irregularmente. Para obtener las últimas noticias, por favor visita el sitio oficial.
1.25
Primera versión: 2025-08-12
Última actualización: go1.25.0 (2025-08-12)
El registro detallado de actualizaciones de go1.25 se puede ver en Go 1.24 Release Notes. Todas las versiones de parche publicadas durante su período de mantenimiento se pueden consultar en Go1.25 - Release Patch.
Nivel del lenguaje
- Se eliminó el concepto de tipo core en genéricos, ver el blog oficial Goodbye core types
Biblioteca estándar
- Nuevo
test/synctest, para probar código concurrente - Nueva biblioteca experimental
encoding/json/v2, que incluye:encoding/json/v2, la velocidad de deserialización es 2-10 veces más rápida que v1, ver benchmark go-json-experiment/jsonbenchencoding/json/jsontext, proporciona la capacidad de interactuar a bajo nivel con cadenas json
Cadena de herramientas
- Las futuras versiones de Go incluirán una pequeña cantidad de herramientas binarias precompiladas
- go mod agrega directiva
ignore, para especificar carpetas que el comando go debe ignorar go doc -httppuede iniciar un servidor http local para ver la documentación del código- go vet, agrega analizadores
waitgroupyhostport - Cuando la línea de comandos go actualiza la versión de go en
go.modogo.work, ya no agrega la versión especificada de go toolchain
Runtime
GOMAXPROCS ahora es consciente de los límites de CPU del contenedor en entornos de contenedores
Nuevo GC experimental
greenteagc, la unidad básica de programación del GC cambió de object a memory spanCuando un panic no es capturado, ya no se imprime repetidamente
panic: PANIC [recovered] panic: PANICcambia a
panic: PANIC [recovered, repanicked]Nuevo
runtime/trace.FlightRecorder, capaz de capturar continuamente información de ejecución de manera más ligera
Compilador
Se corrigió el bug de verificación diferida de punteros nulos en 1.21 (retrasada hasta después de la verificación de errores). El siguiente código que claramente tiene un problema podía ejecutarse normalmente antes de la versión 1.25
gopackage main import "os" func main() { f, err := os.Open("nonExistentFile") name := f.Name() if err != nil { println("should panic") // Antes de 1.25 se imprimiría esta línea return } println(name) }El compilador reservará más memoria de respaldo para slices ubicados en el stack para mejorar el rendimiento de uso
Soporte para generar información de depuración DWARF5
1.24
Primera versión: 2025-02-11
Última actualización: go1.24.6 (2025-08-06)
El registro detallado de actualizaciones de go1.24 se puede ver en Go 1.24 Release Notes. Todas las versiones de parche publicadas durante su período de mantenimiento se pueden consultar en Go1.24 - Release Patch.
Nivel del lenguaje
Alias de tipos genéricos, permite crear alias para tipos genéricos, muy útil cuando se refiere a tipos genéricos definidos por terceros, por ejemplo
goimport ( "other" ) type MyQuque[T any] = other.Queue[T]
Biblioteca estándar
- Nuevo paquete
weak: proporciona punteros débiles (Weak Pointers), permite que los objetos sean referenciados sin aumentar el contador de referencias, evitando fugas de memoria causadas por caché, verificar si el puntero esnilantes de usar - Restricción de acceso al sistema de archivos: introduce el tipo
os.Root, limita las operaciones de archivos a un directorio específico, mejora la seguridad - Soporte de cifrado y hash: nuevos paquetes
crypto/mlkem,crypto/hkdf,crypto/pbkdf2ycrypto/sha3, optimiza el rendimiento de algoritmos de cifrado existentes - Nueva función de benchmark
testing.B.Loop, para mejores pruebas de bucle encoding/json: nueva etiquetaomitzero, soporta filtrado de valores cero basado en el métodoIsZero()stringsybytes: nuevas funciones de iterador (comoLines,SplitSeq,FieldsSeq)
Runtime
- Reconstrucción del map integrado basada en Swiss Tables, velocidad de acceso a map grande mejorada un 30%, velocidad de iteración mejorada 10%-60%
sync.Mapahora usa hash-trie concurrente para optimizar el rendimiento, especialmente en casos de escritura concurrente- Los mutex internos del runtime usan una nueva implementación spinbit, reduce la contención de bloqueos, mejora el rendimiento en escenarios de alta concurrencia
- Optimiza la estrategia de asignación de objetos pequeños, reduce la fragmentación de memoria y el tiempo de pausa del GC
- Nuevo
runtime.AddCleanupreemplazaruntime.SetFinalizer, soporta registrar múltiples funciones de limpieza para objetos, y se ejecutan secuencialmente en una goroutine independiente
Cgo
- Soporta anotaciones
#cgo noescapey#cgo nocallback, declaran respectivamente que las funciones C no escapan memoria y no hacen callback a funciones Go, mejora el rendimiento del runtime - Cgo ahora rechazará compilar llamadas a funciones C con múltiples declaraciones incompatibles, detecta estrictamente declaraciones de funciones C incompatibles entre archivos (como
void f(int)yvoid f(double)), evita generar secuencias de llamada incorrectas
Cadena de herramientas
- Gestión de dependencias de herramientas de módulos: rastrea dependencias de herramientas a través de la directiva tool en go.mod, reemplaza el esquema tradicional de importación vacía tools.go
- Salida estructurada: go build y go test soportan flag -json, salida de resultados de construcción y prueba en formato JSON
- Optimización de compilación y enlace: el compilador mejora la eficiencia de generación de código, el linker genera por defecto GNU Build ID (plataforma ELF) y UUID (macOS)
- Prohíbe usar alias para evadir restricciones en la definición de métodos para tipos generados por CGO
go buildautomáticamente embebe información del sistema de control de versiones en archivos binarios (soporta-buildvcs=falsepara deshabilitar)- La variable de entorno
GOAUTHsoporta autenticación de módulos privados go.modsoporta la directivatoolpara gestionar dependencias ejecutables, reemplaza la importación en blanco detools.go- Nuevos parámetros
go get -tooly comandogo install toolpara gestionar dependencias de herramientas de módulos - El caché de construcción soporta caché binario para
go runygo tool objdumpsoporta desensamblado LoongArch, RISC-V, S390Xvetagrega analizadortests(detecta errores de firma de funciones de prueba)
Compatibilidad de plataforma
- macOS: Go 1.24 es la última versión que soporta macOS 11 Big Sur, Go 1.25 requerirá macOS 12+
- Windows: marca la arquitectura ARM de 32 bits como incompleta (GOOS=windows GOARCH=arm), ver issue #70705
- Linux: el requisito mínimo de versión del kernel se actualiza a 3.2
- Requiere Go 1.22.6+ como cadena de herramientas de bootstrap
Deprecaciones
math/rand.Seed()completamente deshabilitado, necesitaGODEBUG=randseednop=0para restaurar el comportamiento antiguoruntime.GOROOT()marcado como deprecado, se recomienda obtener la ruta a través dego env GOROOT
1.23
Primera versión: 2024-08-13
Última actualización: go1.23.4 (2024-12-03)
El registro detallado de actualizaciones de go1.23 se puede ver en Go 1.23 Release Notes. Todas las versiones de parche publicadas durante su período de mantenimiento se pueden consultar en Go1.23 - Release Patch.
Nivel del lenguaje
for range soporta funciones iteradoras, información detallada en Go Wiki: Rangefunc Experiment.
gofunc Upper(s []string) iter.Seq2[int, string] { return func(yield func(int, string) bool) { for i, s1 := range s { if !yield(i, strings.ToUpper(s1)) { return } } return } } func main() { sl := []string{"hello", "world", "golang"} for i, s := range Upper(sl) { fmt.Printf("%d : %s\n", i, s) } } //0 : HELLO //1 : WORLD //2 : GOLANGEsta es una característica bastante práctica, generalmente se usa en combinación con genéricos.
Biblioteca estándar
Nueva biblioteca estándar
iter, define y describe información detallada sobre iteradoresLa biblioteca
mapsagrega varias funciones de iteradorLa biblioteca
slicesagrega varias funciones de iteradorNueva biblioteca
structs, proporciona la capacidad de modificar propiedades de estructuras, como el diseño de memoriagotype Person struct { Name string Age int _ structs.HostLayout }Optimizada la implementación de la biblioteca estándar
time
Linker
Maneja el abuso de
//go:linkname, para algunas APIs frecuentemente referenciadas temporalmente se permite su existencia, comoruntime.memhash64,runtime.nanotime, etc. En adelante no se permitirán otras nuevas referencias.go//go:linkname gcinit runtime.gcinit func gcinit() func main() { gcinit() }Código como este no puede compilar
link: main: invalid reference to runtime.gcinit
Cadena de herramientas
- Nuevo comando
go telemetrypara gestión de datos de telemetría
1.22
Primera versión: 2024-02-06
Última actualización: go1.22.6 (released 2024-08-06)
El registro detallado de actualizaciones de go1.22 se puede ver en Go 1.22 Release Notes. Todas las versiones de parche publicadas durante su período de mantenimiento se pueden consultar en Go1.22 - Release Patch.
Nivel del lenguaje
Resuelto el problema de las variables de bucle en go
gofunc main() { var wg sync.WaitGroup const n = 10 wg.Add(n) for i := 0; i < n; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait() }Este código antes de 1.22 imprimiría 10 veces 9, después de 1.22 imprimirá normalmente de 0 a 9.
for rangeahora soporta iterar sobre tipos numéricos, como siguegofor i := range 10 { fmt.Println(i) }
Biblioteca estándar
Mejorada la ruta de la biblioteca estándar
net/httpdatabase/sqlagrega tipo genéricosql.Nullgotype Null[T any] struct { V T Valid bool }Uso:
gotype Person struct { Name sql.Null[string] Age sql.Null[int] }
1.21
Primera versión: 2023-08-08
Última actualización: go1.21.13 (released 2024-08-06)
El registro detallado de actualizaciones de go1.21 se puede ver en Go 1.21 Release Notes. Todas las versiones de parche publicadas durante su período de mantenimiento se pueden consultar en Go1.21 - Release Patch.
Nivel del lenguaje
Agregadas dos funciones integradas
min,max, para calcular el valor máximo y mínimo.Agregada función integrada
clear, para vaciar map y sliceActualizado el orden de inicialización de
package- Ordenar todos los paquetes por ruta de importación
- Repetir hasta que la lista de paquetes esté vacía
- Encontrar el primer paquete en la lista cuyas importaciones han sido inicializadas
- Inicializar ese paquete y eliminarlo de la lista
Mejorada la capacidad y precisión de la inferencia de tipos, principalmente relacionado con genéricos.
Lanzada la versión preliminar de la mejora de variables de bucle
for range, un problema que ha preocupado a los desarrolladores de Go por casi diez años, el oficial finalmente va a resolverlo, ver: LoopvarExperiment · golang/go Wiki (github.com) y Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com)Garantizado que el valor de retorno de
recoverno seanil, si el argumento depanicesnil, se disparará otropanic, retornando*runtime.PanicNilError. Para compatibilidad, configurarGODEBUG=panicnil=1al compilar permite pasarnilapanic.
Biblioteca estándar
- Nueva biblioteca
log/slog, proporciona biblioteca de logging estructurado estándar - Nueva biblioteca
testing/slogtest, para validar implementaciones deslog.Handler - Nueva biblioteca
slices, proporciona una serie de funciones genéricas para manipular slices. - Nueva biblioteca
maps, proporciona una serie de funciones genéricas para manipular map - Nueva biblioteca
cmp, para comparar tipos ordenados.
Otros
- go1.21.0 en sistemas windows al menos requiere win10 o Windows Server 2016 o superior para ejecutarse, versiones anteriores ya no son soportadas.
- go1.21.0 al menos requiere macOS 10.15 Catalina o superior para ejecutarse, versiones anteriores ya no son soportadas.
- Agregada soporte experimental para WebAssembly System Interface, Go continúa explorando en WASM.
- En 1.20 era experimental Profile-guide optimization PGO (ver Profile-guided optimization - The Go Programming Language), versión 1.21 lo habilita oficialmente. Incluir archivo
default.pgoen el paquete main habilitará esta función, el rendimiento puede mejorar 2%-7% después de activarse. - Al imprimir call stacks de runtime muy profundos, de imprimir solo los primeros 100 frames, ahora imprime los primeros 50 y los últimos 50 frames.
- Optimizado el rendimiento de llamadas CGO en plataformas Unix, de 1-3 microsegundos a 100-200 nanosegundos.
- En la versión 1.21, la velocidad de compilación mejoró cerca de 6%, principalmente debido a que el compilador mismo usa PGO para construir.
Versiones Anteriores
Para las versiones 1.20 y anteriores, el registro detallado de actualizaciones se puede encontrar en Go Release History.
Las versiones principales y sus características más destacadas incluyen:
- 1.20: Nuevo paquete
crypto/ecdh, soporte para envolver múltiples errores - 1.19: Modelo de memoria alineado con C/C++,
sync/atomicmás tipos disponibles - 1.18: Soporte para genéricos, type set interfaces, restricciones de tipos parametrizados
- 1.17: Nuevas funciones
unsafe.Addyunsafe.Slice - 1.16: Deprecación del paquete
ioutil, soporte para//go:embed - 1.14: Soporte para anidamiento de interfaces de tipos método
- 1.11: Primera versión de GoMod, soporte experimental para WASM
- 1.9: Soporte para alias de tipos,
sync.Mapconcurrent-safe - 1.5: Runtime y compilador completamente reescritos en Go
- 1.0: Primera versión oficial, publicada el 2012-03-28
Para información detallada de versiones históricas, visita el sitio oficial de Go.
