imagen

Nuevo en Go 1.18


Genéricos, fuzzing de prueba, optimización AMD64, modo de espacio de trabajo y más


Es esa época del año otra vez: una nueva versión de Go está a punto de ser lanzada. El equipo de Go acaba de lanzar Go 1.18 Release Candidate 1 (go1.18rc1) y espera lanzar Go 1.18 en febrero de 2022.


Go 1.18 es uno de los lanzamientos de Go más esperados en mucho tiempo y por una buena razón. Go 1.18 implementa soporte inicial para tipos y funciones genéricos, la característica más buscada de la comunidad Go, y quizás la más controvertida.

Además de los genéricos, Go 1.18 incluye muchas otras características excelentes, como soporte para test fuzzing, soporte de microarquitectura y optimizaciones para CPU AMD64, cambios en la herramienta go, incluido el soporte para el modo "espacio de trabajo", soporte para bibliotecas principales. Algunas actualizaciones también. tantas correcciones de errores y pequeñas actualizaciones de la biblioteca estándar.
Echemos un vistazo a algunas de las principales actualizaciones.


Los genéricos son compatibles


Los genéricos son la función más esperada de esta versión. De acuerdo con la propuesta de genéricos, Go 1.18 admite implementaciones iniciales de tipos y funciones genéricos. Con esta nueva adición, el lenguaje admite la declaración de tipos y funciones parametrizados que luego se pueden instanciar con diferentes tipos de parámetros.
El uso de genéricos aumenta la reutilización del código genérico al permitirle combinar conjuntos de funciones o tipos que tienen implementaciones similares pero operan en diferentes tipos de entrada en una sola entidad que es más fácil de probar y mantener.
Por ejemplo, es común que algunas bibliotecas tengan un código similar al siguiente:

func SumInt(a, b int) int { 
return a + b
}func SumFloat32(a, b float32) float32 {
return a + b
}func SumFloat64(a, b float64) float64 {
return a + b
}//func sum. ..

Mediante el uso de funciones genéricas, puede combinar todas estas funciones en una sola:

func Sum[T restricciones.Ordenado] (a, b T) T {
return a + b
}

Debido a que este es un cambio importante en el idioma y es una característica completamente nueva, existen algunas limitaciones, puede haber problemas de rendimiento y puede haber problemas desconocidos. Tenga en cuenta estas incertidumbres al implementar código genérico en producción.
Para obtener más información sobre los genéricos, consulte las notas de la versión y la especificación de idioma actualizada.


prueba de fuzzing


Otra adición bienvenida a Go 1.18 es la compatibilidad con pruebas de fuzzing. Fuzzing es una estrategia de prueba de software que implica proporcionar una gran cantidad de parámetros de entrada aleatorios al código bajo prueba, incluidos muchos casos extremos, con el objetivo de detectar errores, exponerlos, desencadenar excepciones y descubrir la detección de vulnerabilidades que es difícil para los humanos. detectar.
Go test fuzzing agrega un nuevo tipo al paquete de prueba testing.F y amplía las características y estrategias actuales de Go, como Table Driven Testing. Antes de esta versión, podía usar bibliotecas externas para realizar pruebas de fuzzing, pero agregar fuzzing a las herramientas estándar brindará un mejor soporte y un acceso más fácil para más desarrolladores.
🌟 TENGA EN CUENTA: el equipo de Go nos recuerda que la implementación actual de fuzzing usa muchos recursos del sistema y puede afectar el rendimiento del sistema durante la ejecución.
Consulte la documentación de Go Fuzzing para obtener más detalles.


Optimizaciones de microarquitectura para CPU AMD64


Go 1.18 presenta optimizaciones de microarquitectura para procesadores AMD64. Ahora puede usar la nueva variable de entorno Go GOAMD64 para seleccionar uno de los cuatro objetivos de microarquitectura v1, v2, v3 o v4 para indicarle al compilador que optimice los archivos binarios generados para capacidades específicas de CPU. Hace que las instrucciones binarias optimizadas sean incompatibles con los procesadores que no tienen esas características.
El valor predeterminado de la variable GOAMD64=v1 da como resultado instrucciones binarias compatibles con todos los procesadores x86 de 64 bits.
Consulte la sección Arquitectura de la página Requisitos mínimos para obtener más detalles sobre esta función.

Entrar en el modo de espacio de trabajo


Finalmente, para la última actualización destacada, Go 1.18 presenta una nueva compatibilidad con el modo de espacio de trabajo para el comando go, que le permite trabajar en varios módulos simultáneamente. Anteriormente, usar varios módulos no era fácil y podía causar problemas con las herramientas y los IDE. Esta nueva función soluciona estos problemas y realiza cambios en otras herramientas, como gopls, para simplificar el trabajo con varios módulos.
Con este cambio, si un comando o herramienta go encuentra un archivo llamado go.work en el directorio actual o principal, se ejecutará en modo de espacio de trabajo. Luego usa el contenido de este archivo para determinar qué módulos usar para resolver las dependencias, en lugar del archivo go.mod.
En Go 1.18, puede usar el comando go work para crear y administrar archivos go.work. Consulte su documentación para obtener más información.
Para obtener una explicación más detallada de las funciones del espacio de trabajo y un resumen de muchas otras mejoras de Go 1.18, consulte el episodio 217 del podcast Go Time.


¿Que sigue?


Este artículo resume brevemente las principales actualizaciones de Go 1.18, pero hay muchas correcciones de errores adicionales y pequeñas mejoras en las herramientas, el compilador y la biblioteca estándar. Para obtener una lista completa, consulte las notas de la versión Go 1.18.
Si no puede esperar el lanzamiento final en unas pocas semanas y desea comenzar a probar Go 1.18 de inmediato sin instalarlo en su máquina, visite Go Playground y seleccione Go Dev Branch en el menú desplegable Go Release. También puede ejecutarlo como un contenedor utilizando Podman o Docker.


Si desea instalarlo en su máquina para poder probarlo con algún código, siga las instrucciones en la página de descarga para descargar Go 1.18 RC1 a su máquina local.

Este artículo https://jiagoushi.pro/whats-new-go-118
Únase a Knowledge Planet [Super Engineer] o trompeta [ceo_engr] o grupo QQ [1019061742]
introducir Código QR
el público

La cuenta oficial [Super Engineer] explica el desarrollo profesional y la arquitectura, los métodos, las tecnologías y la experiencia del desarrollo low-code.

imagen

Trompeta WeChat Pequeño [ceo_engr]

imagen

grupo QQ

Grupo QQ [11107767] Varios grupos de discusión subdivididos: Apex, Power, Mendix, Excel, CMS, niños. Pila completa como Java, Python, Go, Rust, Groovy, SCala, KNode.JS, TypeScript, JavaScript, R, Ballerina (lenguaje de programación de bailarines), varios marcos y herramientas.

imagen

numero de video

Video [ Super Programmer ] Comprenda rápidamente los conceptos, modelos, métodos y experiencias básicos relacionados con el desarrollo de código bajo en 1 minuto.

No limitado a Excel, Power Query, Power BI, Power Apps, Power Automate, Mendix, Apex, OpenXava, Apache Isis, etc.

imagen

numero de video

Video [ Super Chief Engineer ] Comprenda rápidamente los conceptos básicos, los modelos, los métodos y la experiencia relacionados con los ingenieros de pila completa en 1 minuto.

No limitado a Java, Python, Go, Rust, Groovy, SCala, KNode.JS, TypeScript, JavaScript, R, Ballerina (lenguaje de programación de bailarines), varios marcos y herramientas.

imagen

planeta del conocimiento Planeta [Superingeniero] Haga grandes preguntas de café, acérquese u obtenga información privada para compartir.

imagen

Weibo Weibo [Jefe de Ingeniería] súper ingeniero
pequeño libro rojo Súper Ingeniero súper ingeniero
trabajador rapido súper ingeniero ]

imagen

Tik Tok súper ingeniero ]

imagen