Saturday, April 6, 2019

Go Modules en 2019 – El blog Go

Go Modules in 2019

19 de diciembre de 2018

¡Qué año!

2018 fue un gran año para el ecosistema de Go, con

    La gestión de paquetes como uno de nuestros principales enfoques.

    En febrero, comenzamos una discusión de toda la comunidad sobre cómo integrar

    gestión de paquetes directamente en la cadena de herramientas Ir,

    y en agosto entregamos la primera implementación aproximada de esa característica,

    Se llaman módulos Go, en Go 1.11.

    Los módulos de migración a Go serán el cambio de mayor alcance.

    para el ecosistema Go desde Go 1.

    Convertir todo el ecosistema (código, usuarios, herramientas, etc.) desde

    GOPATH para módulos requerirá trabajo en muchas áreas diferentes.

    El sistema de módulos a su vez nos ayudará a entregar

    Mejoras de autenticación y velocidad de construcción para el ecosistema Go.
  

Esta publicación es una vista previa de lo que el equipo Go está planeando

    relativas a los módulos en 2019.
  

Lanzamientos

Go 1.11, lanzado en agosto de 2018, introdujo soporte preliminar para módulos .

    Por ahora, el soporte del módulo se mantiene junto con el

    Mecanismos tradicionales basados ​​en GOPATH.

    El comando go se establece por defecto en el modo de módulo cuando se ejecuta

    en los árboles del directorio fuera de GOPATH / src y

    marcados por go.mod en sus raíces.

    Esta configuración se puede anular configurando la transición

    variable de entorno $ GO111MODULE a en o desactivado ;

    el comportamiento predeterminado es modo automático .

    Ya hemos visto una adopción significativa de módulos en toda la comunidad Go,

    junto con muchas sugerencias útiles e informes de errores

    Para ayudarnos a mejorar los módulos.
  

Go 1.12, programado para febrero de 2019, refinará el soporte del módulo

    pero aún así, déjelo en el modo auto por defecto.

    Además de muchas correcciones de errores y otras mejoras menores,

    Quizás el cambio más significativo en Go 1.12

    es que comandos como van ejecutan x.go

    o go get rsc.io/2fa@v1.1.0

    ahora puede operar en GO111MODULE = en modo sin un archivo explícito go.mod .
  

Nuestro objetivo es para Go 1.13, programado para agosto de 2019, para habilitar el modo de módulo mediante

    predeterminado (es decir, para cambiar el valor predeterminado de auto a en )

    y despreciar el modo GOPATH.

    Para hacer eso, hemos estado trabajando en un mejor soporte de herramientas

    junto con un mejor soporte para el ecosistema de módulos de código abierto.
  

Integración de herramientas e IDE

En los ocho años que hemos tenido GOPATH,

    Se ha creado una increíble cantidad de herramientas.

    que asume que el código fuente de Go está almacenado en GOPATH.

    Mover a módulos requiere actualizar todo el código que hace

    esa suposición

    Hemos diseñado un nuevo paquete,

     golang.org/x/tools/go/packages ,

    Que abstrae la operación de búsqueda y carga de información.

    sobre el código fuente de Go para un objetivo dado.

    Este nuevo paquete se adapta automáticamente a ambos.

    GOPATH y modo de módulos y también es extensible.

    a diseños de código específicos de la herramienta, como el

    utilizado por Bazel.

    Hemos estado trabajando con autores de herramientas en toda la comunidad de Go

    para ayudarles a adoptar golang.org/x/tools/go/packages en sus herramientas.
  

Como parte de este esfuerzo, también hemos estado trabajando para

    Unificar las diversas herramientas de consulta de código fuente.

    como gocode, godef y go-outline

    en una sola herramienta que se puede utilizar desde el

    línea de comandos y también soporta

    El protocolo del servidor de idiomas

    utilizado por los IDE modernos.
  

La transición a módulos y los cambios en la carga de paquetes

    También provocó un cambio significativo en el análisis del programa Go.

    Como parte de la revisión vaya veterinario a los módulos de soporte,

    Introducimos un marco generalizado para incrementales.

    Análisis de los programas Go.

    en el que se invoca un analizador para un paquete a la vez.

    En este marco, el análisis de un paquete puede escribir hechos

    Disponible para análisis de otros paquetes que importen el primero.

    Por ejemplo, go vet el análisis del paquete de registros

    determina y registra el hecho de que log.Printf es un fmt.Printf envoltorio.

    Entonces go vet puede verificar cadenas de formato de estilo printf en otros paquetes

    esa llamada log.Printf .

    Este marco debería permitir muchos nuevos y sofisticados

    Herramientas de análisis de programas para ayudar a los desarrolladores a encontrar errores antes.

    y entender mejor el código.
  

Índice del módulo

Una de las partes más importantes del diseño original para ir obtener

    fue que fue descentralizado :

    entonces creímos, y todavía creemos hoy, que

    Cualquiera debería poder publicar su código en cualquier servidor,

    en contraste con los registros centrales

    como el CPAN de Perl, Maven de Java o el NPM de Node.

    Colocar nombres de dominio al comienzo del espacio de importación go get

    reutilizado un sistema descentralizado existente

    y evitado tener que resolver de nuevo los problemas de

    decidir quién puede usar qué nombres.

    También permitió a las empresas importar código en servidores privados.

    Junto al código de los servidores públicos.

    Es fundamental preservar esta descentralización a medida que cambiamos a los módulos de Go.
  

La descentralización de las dependencias de Go ha tenido muchos beneficios,

    pero también trajo algunos inconvenientes significativos.

    La primera es que es muy difícil encontrar todos los paquetes Go disponibles públicamente.

    Todo sitio que quiera entregar información sobre

    paquetes tiene

    para realizar su propio rastreo, o esperar a que un usuario le pregunte

    sobre un paquete en particular antes de buscarlo.
  

Estamos trabajando en un nuevo servicio, el Go Module Index,

    que proporcionará un registro público de paquetes que entran en el ecosistema Go.

    Sitios como godoc.org y goreportcard.com podrán ver este registro

    para nuevas entradas en lugar de cada código de implementación independiente

    para encontrar nuevos paquetes.

    También queremos que el servicio permita buscar paquetes.

    utilizando consultas simples, para permitir goimports agregar

    importa paquetes que aún no se hayan descargado al sistema local.
  

Autenticación del módulo

Hoy en día, go get se basa en la autenticación a nivel de conexión (HTTPS o SSH)

    para comprobar que está hablando con el servidor correcto para descargar el código.

    No hay verificación adicional del código en sí,

    dejando abierta la posibilidad de ataques de hombre en el medio

    si los mecanismos HTTPS o SSH están comprometidos de alguna manera.

    La descentralización significa que el código para una construcción es recuperado

    de muchos servidores diferentes, lo que significa que la compilación depende de

    Muchos sistemas para servir código correcto.
  

El diseño de los módulos Go mejora la autenticación del código al almacenar

    un archivo go.sum en cada módulo;

    ese archivo lista el hash criptográfico

    del árbol de archivos esperado para cada una de las dependencias del módulo.

    Cuando se usan módulos, el comando go usa go.sum para verificar

    que las dependencias son bit a bit idénticas a las versiones esperadas

    Antes de usarlos en una compilación.

    Pero el archivo go.sum solo enumera hashes para las dependencias específicas

    utilizado por ese módulo.

    Si está agregando una nueva dependencia.

    o actualizar dependencias con go get -u ,

    no hay una entrada correspondiente en go.sum y por lo tanto

    No hay autenticación directa de los bits descargados.
  

Para los módulos disponibles públicamente, pretendemos ejecutar un servicio al que llamamos notario

    que sigue el módulo de registro de índice,

    descarga nuevos módulos,

    y firma criptográficamente declaraciones de la forma.

    "El módulo M en la versión V tiene el árbol de archivo hash H."

    El servicio de notaría publicará todos estos hashes notariados.

    en una consulta, Certificado de transparencia -estilo

     registro a prueba de manipulaciones ,

    para que cualquiera pueda verificar que el notario se comporta correctamente.

    Este registro servirá como un archivo público, global go.sum

    que go get puede usar para autenticar módulos

    Al agregar o actualizar dependencias.
  

Nuestro objetivo es que el comando go compruebe los hashes notariados

    para módulos disponibles al público que aún no se encuentran en go.sum

    comenzando en Go 1.13.
  

Módulo espejos

Debido a que descentralizado go get obtiene el código de varios servidores de origen,

    El código de recuperación es tan rápido y confiable como el más lento,

    Servidor menos confiable.

    La única defensa disponible antes de los módulos era al vendedor.

    Dependencias en tus propios repositorios.

    Mientras que el vendedor continuará siendo apoyado,

    preferiríamos una solución que funcione para todos los módulos, no solo los que ya está usando, y

    que no requiere duplicar una dependencia en cada

    repositorio que lo utiliza.
  

El diseño del módulo Go presenta la idea de un módulo proxy,

    que es un servidor que el comando go solicita módulos,

    En lugar de los servidores de origen.

    Un tipo importante de proxy es un módulo espejo ,

    que responde a las solicitudes de módulos al buscarlos

    desde los servidores de origen y luego almacenarlos en caché para su uso en

    futuras solicitudes.

    Un espejo bien manejado debe ser rápido y confiable

    incluso cuando algunos servidores de origen han caído.

    Estamos planeando lanzar un servicio espejo para los módulos disponibles públicamente en 2019.

    Otros proyectos, como GoCenter y Athens, también están planeando servicios espejo.

    (Anticipamos que las empresas tendrán múltiples opciones para correr

    sus propios espejos internos también, pero esta publicación se centra en los espejos públicos.)
  

Un problema potencial con los espejos es que son

    precisamente servidores en el medio,

    Haciéndolos un objetivo natural para los ataques.

    Los desarrolladores de Go necesitan cierta seguridad de que los espejos

    Están proporcionando los mismos bits que los servidores de origen.

    El proceso notarial que describimos en la sección anterior.

    aborda exactamente esta preocupación, y

    Se aplicará a las descargas utilizando espejos.

    así como descargas utilizando servidores de origen.

    Los espejos en sí no necesitan ser confiados.
  

Queremos que el módulo de ejecución de Google refleje

    listo para ser usado por defecto en el comando go que comienza en Go 1.13.

    Usar un espejo alternativo, o ningún espejo será trivial

    para configurar.
  

Descubrimiento del módulo

Finalmente, mencionamos anteriormente que el índice del módulo hará que sea más fácil

    construir sitios como godoc.org.

    Parte de nuestro trabajo en 2019 será una importante renovación de godoc.org

    para que sea más útil para los desarrolladores que necesitan

    Descubre los módulos disponibles.

    y luego decidir si confiar en un módulo dado o no.
  

Imagen general

Este diagrama muestra cómo el código fuente del módulo

    Se mueve a través del diseño en este post.
  

Antes, todos los consumidores del código fuente de Go: el comando go

    y cualquier sitio como godoc.org: código obtenido directamente de cada host de código.

    Ahora pueden obtener código en caché de un espejo rápido y confiable,

    sin dejar de autenticar que los bits descargados son correctos.

    Y el servicio de índice lo hace fácil para los espejos, godoc.org,

    y cualquier otro sitio similar para mantenerse al día con todas las grandes novedades

    Código que se agrega al ecosistema Go todos los días.
  

Estamos entusiasmados con el futuro de los módulos Go en 2019,

    y esperamos que usted también lo sea. ¡Feliz año nuevo!
  

Por Russ Cox


READ MORE – CLICK HERE

www.Down.co.ve


No comments:

Post a Comment

Como crear tarjetas Virtuales Visa o MasterCard con tu divisa y las ventajas que ofrecen

Hoy día, gracias al creciente mundo del Internet se le ha permitido a cada persona poder acceder a muchos productos o servicios. Y en estos ...