Skip to content

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

  1. Se eliminó el concepto de tipo core en genéricos, ver el blog oficial Goodbye core types

Biblioteca estándar

  1. Nuevo test/synctest, para probar código concurrente
  2. 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/jsonbench
    • encoding/json/jsontext, proporciona la capacidad de interactuar a bajo nivel con cadenas json

Cadena de herramientas

  1. Las futuras versiones de Go incluirán una pequeña cantidad de herramientas binarias precompiladas
  2. go mod agrega directiva ignore, para especificar carpetas que el comando go debe ignorar
  3. go doc -http puede iniciar un servidor http local para ver la documentación del código
  4. go vet, agrega analizadores waitgroup y hostport
  5. Cuando la línea de comandos go actualiza la versión de go en go.mod o go.work, ya no agrega la versión especificada de go toolchain

Runtime

  1. GOMAXPROCS ahora es consciente de los límites de CPU del contenedor en entornos de contenedores

  2. Nuevo GC experimental greenteagc, la unidad básica de programación del GC cambió de object a memory span

  3. Cuando un panic no es capturado, ya no se imprime repetidamente

    panic: PANIC [recovered]
      panic: PANIC

    cambia a

    panic: PANIC [recovered, repanicked]
  4. Nuevo runtime/trace.FlightRecorder, capaz de capturar continuamente información de ejecución de manera más ligera

Compilador

  1. 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

    go
    package 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)
    }
  2. El compilador reservará más memoria de respaldo para slices ubicados en el stack para mejorar el rendimiento de uso

  3. 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

  1. 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

    go
    import (
        "other"
    )
    
    type MyQuque[T any] = other.Queue[T]

Biblioteca estándar

  1. 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 es nil antes de usar
  2. 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
  3. Soporte de cifrado y hash: nuevos paquetes crypto/mlkem, crypto/hkdf, crypto/pbkdf2 y crypto/sha3, optimiza el rendimiento de algoritmos de cifrado existentes
  4. Nueva función de benchmark testing.B.Loop, para mejores pruebas de bucle
  5. encoding/json: nueva etiqueta omitzero, soporta filtrado de valores cero basado en el método IsZero()
  6. strings y bytes: nuevas funciones de iterador (como Lines, SplitSeq, FieldsSeq)

Runtime

  1. 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%
  2. sync.Map ahora usa hash-trie concurrente para optimizar el rendimiento, especialmente en casos de escritura concurrente
  3. 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
  4. Optimiza la estrategia de asignación de objetos pequeños, reduce la fragmentación de memoria y el tiempo de pausa del GC
  5. Nuevo runtime.AddCleanup reemplaza runtime.SetFinalizer, soporta registrar múltiples funciones de limpieza para objetos, y se ejecutan secuencialmente en una goroutine independiente

Cgo

  1. Soporta anotaciones #cgo noescape y #cgo nocallback, declaran respectivamente que las funciones C no escapan memoria y no hacen callback a funciones Go, mejora el rendimiento del runtime
  2. 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) y void f(double)), evita generar secuencias de llamada incorrectas

Cadena de herramientas

  1. 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
  2. Salida estructurada: go build y go test soportan flag -json, salida de resultados de construcción y prueba en formato JSON
  3. 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)
  4. Prohíbe usar alias para evadir restricciones en la definición de métodos para tipos generados por CGO
  5. go build automáticamente embebe información del sistema de control de versiones en archivos binarios (soporta -buildvcs=false para deshabilitar)
  6. La variable de entorno GOAUTH soporta autenticación de módulos privados
  7. go.mod soporta la directiva tool para gestionar dependencias ejecutables, reemplaza la importación en blanco de tools.go
  8. Nuevos parámetros go get -tool y comando go install tool para gestionar dependencias de herramientas de módulos
  9. El caché de construcción soporta caché binario para go run y go tool
  10. objdump soporta desensamblado LoongArch, RISC-V, S390X
  11. vet agrega analizador tests (detecta errores de firma de funciones de prueba)

Compatibilidad de plataforma

  1. macOS: Go 1.24 es la última versión que soporta macOS 11 Big Sur, Go 1.25 requerirá macOS 12+
  2. Windows: marca la arquitectura ARM de 32 bits como incompleta (GOOS=windows GOARCH=arm), ver issue #70705
  3. Linux: el requisito mínimo de versión del kernel se actualiza a 3.2
  4. Requiere Go 1.22.6+ como cadena de herramientas de bootstrap

Deprecaciones

  1. math/rand.Seed() completamente deshabilitado, necesita GODEBUG=randseednop=0 para restaurar el comportamiento antiguo
  2. runtime.GOROOT() marcado como deprecado, se recomienda obtener la ruta a través de go 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

  1. for range soporta funciones iteradoras, información detallada en Go Wiki: Rangefunc Experiment.

    go
    func 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 : GOLANG

    Esta es una característica bastante práctica, generalmente se usa en combinación con genéricos.

Biblioteca estándar

  1. Nueva biblioteca estándar iter, define y describe información detallada sobre iteradores

  2. La biblioteca maps agrega varias funciones de iterador

  3. La biblioteca slices agrega varias funciones de iterador

  4. Nueva biblioteca structs, proporciona la capacidad de modificar propiedades de estructuras, como el diseño de memoria

    go
    type Person struct {
      Name string
      Age  int
      _    structs.HostLayout
    }
  5. Optimizada la implementación de la biblioteca estándar time

Linker

  1. Maneja el abuso de //go:linkname, para algunas APIs frecuentemente referenciadas temporalmente se permite su existencia, como runtime.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

  1. Nuevo comando go telemetry para 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

  1. Resuelto el problema de las variables de bucle en go

    go
    func 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.

  2. for range ahora soporta iterar sobre tipos numéricos, como sigue

    go
    for i := range 10 {
      fmt.Println(i)
    }

Biblioteca estándar

  1. Mejorada la ruta de la biblioteca estándar net/http

  2. database/sql agrega tipo genérico sql.Null

    go
    type Null[T any] struct {
      V     T
      Valid bool
    }

    Uso:

    go
    type 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

  1. Agregadas dos funciones integradas min, max, para calcular el valor máximo y mínimo.

  2. Agregada función integrada clear, para vaciar map y slice

  3. Actualizado 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
  4. Mejorada la capacidad y precisión de la inferencia de tipos, principalmente relacionado con genéricos.

  5. 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)

  6. Garantizado que el valor de retorno de recover no sea nil, si el argumento de panic es nil, se disparará otro panic, retornando *runtime.PanicNilError. Para compatibilidad, configurar GODEBUG=panicnil=1 al compilar permite pasar nil a panic.

Biblioteca estándar

  1. Nueva biblioteca log/slog, proporciona biblioteca de logging estructurado estándar
  2. Nueva biblioteca testing/slogtest, para validar implementaciones de slog.Handler
  3. Nueva biblioteca slices, proporciona una serie de funciones genéricas para manipular slices.
  4. Nueva biblioteca maps, proporciona una serie de funciones genéricas para manipular map
  5. Nueva biblioteca cmp, para comparar tipos ordenados.

Otros

  1. go1.21.0 en sistemas windows al menos requiere win10 o Windows Server 2016 o superior para ejecutarse, versiones anteriores ya no son soportadas.
  2. go1.21.0 al menos requiere macOS 10.15 Catalina o superior para ejecutarse, versiones anteriores ya no son soportadas.
  3. Agregada soporte experimental para WebAssembly System Interface, Go continúa explorando en WASM.
  4. 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.pgo en el paquete main habilitará esta función, el rendimiento puede mejorar 2%-7% después de activarse.
  5. 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.
  6. Optimizado el rendimiento de llamadas CGO en plataformas Unix, de 1-3 microsegundos a 100-200 nanosegundos.
  7. 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/atomic más tipos disponibles
  • 1.18: Soporte para genéricos, type set interfaces, restricciones de tipos parametrizados
  • 1.17: Nuevas funciones unsafe.Add y unsafe.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.Map concurrent-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.

Golang editado por www.golangdev.cn