El comienzo de GO: Entrando al mundo de Golang con Java en la mano

1. Introducción a Golang

Go (también conocido como Golang) es un lenguaje de programación de alto nivel para computadoras desarrollado por Robert Griesemer, Rob Pike y Ken Thompson de Google.

Documentación oficial de Go: https://golang.org

Documentación de la API china de Go: https://studygolang.com/pkgdoc

Ir al sitio web de la comunidad china: https://studygolang.com/

1. El nacimiento de Go

Antes del lanzamiento de go, ya existían muchos lenguajes de programación de alto nivel, como: C, C++, C#, Java... . ¿Por qué hacer otro GO?

Hay tres razones principales:

1> La tecnología de hardware de la computadora se actualiza con frecuencia y el rendimiento mejora rápidamente. Sin embargo, el desarrollo de los principales lenguajes de programación obviamente va a la zaga del hardware, y las ventajas de múltiples núcleos y múltiples CPU no se pueden usar de manera razonable para mejorar el rendimiento de los sistemas de software. Los lenguajes de programación antiguos no pueden lograr un buen equilibrio entre la eficiencia de desarrollo y la eficiencia de ejecución:

  • C++ y similares tienen una alta eficiencia de ejecución, una baja eficiencia de desarrollo y una velocidad de compilación lenta.
  • JAVA y similares tienen una alta velocidad de compilación, pero una baja eficiencia de ejecución.

En general, la eficiencia de ejecución y la eficiencia de desarrollo de cada idioma:

  • Eficiencia de ejecución (velocidad de ejecución): C/C++ > Java > Python
  • Desarrollando eficiencia: Python > Java > C/C++

Por un lado, el nacimiento del lenguaje Go es tener velocidad de ejecución eficiente, velocidad de compilación y velocidad de desarrollo al mismo tiempo.

2> La complejidad del sistema de software es cada vez mayor, el costo de mantenimiento es cada vez mayor y falta un lenguaje de programación suficientemente conciso y eficiente.

  • Dentro de Google, a medida que la escala del proyecto continúa expandiéndose, la complejidad del desarrollo y el mantenimiento está arrastrando a Google al atolladero paso a paso.
  • El sistema es cada vez más complejo y una gran cantidad de código está escrito en C++, Java y Python, y la escala es cada vez mayor. Se requiere una gran cantidad de programadores para trabajar con decenas de miles de líneas de código y millones de servidores todos los días para garantizar el funcionamiento normal de varios servicios.

3> La empresa opera y mantiene muchos proyectos c/c++, aunque el programa c/c++ corre muy rápido, la velocidad de compilación es realmente lenta, al mismo tiempo, todavía hay una serie de problemas de fugas de memoria que necesitan estar solucionado.

En respuesta a los problemas anteriores, tres ingenieros de Google tuvieron una discusión en la tarde del 20 de septiembre de 2007, y fue esta discusión la que condujo a una reunión de tres personas organizada al día siguiente en el Edificio 43, Mountain View, California. Las tres personas presentes en la reunión fueron los fundadores de Go: Robert Griesemer, Rob Pike y Ken Thompson. Los principales logros de estos tres dioses son los siguientes:

  1. Robert Griesemer (uno de los desarrolladores de la máquina virtual Java HotSpot y el motor V8)
  2. Rob Pike Rob Pike (Miembro del equipo UNIX de Bell Labs, ha participado en proyectos como Plan9, Inferno y Limbo)
  3. Ken Thompson Ken Thompson (Miembro del equipo de UNIX en Bell Labs, uno de los fundadores del lenguaje C, UNIX y Plan 9, y co-desarrolló la especificación del juego de caracteres UTF-8 con Rob Pike)

En el sitio web oficial de Go ( https://go.dev/solutions/google/ ), hay un pasaje de Rob Pike que describe el nacimiento, el lanzamiento y el estado actual de Go (2020):

inserte la descripción de la imagen aquí

2. Nombre de dominio del sitio web oficial de Go

¿Por qué se llama oficialmente Golang, pero todos dicen que es Go?

Lo interesante es que cuando Google registró el nombre de dominio del sitio web oficial de Go, go.orgDisney ya había registrado el nombre de dominio. En su lugar: golang.orgse utiliza el nombre de dominio. Esto también ha llevado a muchas personas a pensar erróneamente que Golang es su nombre oficial, sin embargo, solo podemos pensar que Golang es un apodo para Go.

3. Desarrollo de Go

El lenguaje Go se originó en septiembre de 2007. En noviembre de 2009, Google lanzó oficialmente el lenguaje Go y era completamente de código abierto bajo el protocolo BSD. En marzo de 2012, se lanzó go1.0 y en agosto de 2015, se lanzó go1.5. (nodo histórico, elimine por completo la parte del lenguaje C, use GO para compilar GO). La última versión es go1.20. Todos los nodos de liberación ( enlaces de transferencia ) son los siguientes:
inserte la descripción de la imagen aquí

Además, durante el proceso de iteración de la versión del lenguaje GO, las características del lenguaje básicamente no han cambiado mucho y básicamente se mantienen en el punto de referencia GO1.1; y la promesa oficial es que la nueva versión es totalmente compatible con el código desarrollado bajo la versión antigua

En los últimos 2 o 3 años, la clasificación del idioma GO en la lista de clasificación de idiomas ( https://www.tiobe.com/tiobe-index/ ) es relativamente fija (alrededor del 12):
inserte la descripción de la imagen aquí

Las tendencias generales del uso del idioma son las siguientes:

inserte la descripción de la imagen aquí

4. La idea de diseño de Go

El diseño central de GO es muy simple en aras de la simplicidad: "keep it simple", que persigue una filosofía simple y práctica, reduciendo la complejidad del código desde el nivel del lenguaje.

Por ejemplo: interfaz implícita y corte, debilitamiento de clases, debilitamiento de punteros, desarrollo conciso y eficiente.

5. Características de Go

En comparación con otras gramáticas, GO tiene la característica más importante: la concurrencia.

Admite de forma nativa la programación concurrente. El lenguaje Go tiene un soporte extremadamente alto para la comunicación en red, la programación concurrente y paralela, por lo que puede utilizar mejor una gran cantidad de computadoras distribuidas y de múltiples núcleos.

Los desarrolladores pueden lograr este objetivo a través del concepto de goroutine, un subproceso ligero, y luego usar canales para realizar la comunicación entre goroutines. Automatizan el crecimiento de la pila segmentada y la multiplexación de rutinas por subprocesos.

Extensiones posteriores al modelo de programación de GO (GMP).

Sin embargo, GO también tiene muchas funciones de lenguaje orientado a objetos que no son compatibles:

  • No se admiten la sobrecarga de funciones ni la sobrecarga de operadores para simplificar el diseño;
  • No admite la conversión implícita, para evitar algunos errores y confusiones en el desarrollo de C/C++;
  • Abandone la herencia de clases y tipos e implemente el diseño orientado a objetos de otras formas;
  • Los genéricos no son compatibles;
  • No admite código de carga dinámica, biblioteca de enlaces dinámicos;
  • No se admiten proxies dinámicos;
  • Las variables estáticas no son compatibles;
  • No se admiten aserciones;
  • El mecanismo de excepción se reemplaza por recovery y panic.

6. Vaya rendimiento

Al igual que C y C++, el lenguaje Go también es un lenguaje compilado.Compila directamente código legible por humanos en un archivo binario que el procesador puede ejecutar directamente, con mayor eficiencia de ejecución y mejor rendimiento.

De acuerdo con el equipo de desarrollo de Go y la prueba del algoritmo básico, los resultados estadísticos antes del 28 de marzo de 2013 muestran que la brecha de rendimiento entre el lenguaje Go y el lenguaje C es de aproximadamente 10 %~20 %.

Una estimación conservadora es que un programa Go es 2 veces más rápido que una aplicación Java o Scala y utiliza un 70 % menos de memoria que cualquiera de los dos lenguajes, dado el mismo entorno y los mismos objetivos de ejecución.

7. La mascota de Go

Ardilla listada (Gordon)

inserte la descripción de la imagen aquí

En segundo lugar, la comparación macro de Go y Java

1> ¿Multiplataforma?

  • Debido a que Java es compatible con la máquina virtual JVM, tiene la característica de "compilar una vez, ejecutar en todas partes".
  • Sin embargo, GO no tiene una máquina virtual y no cruza plataformas (múltiples sistemas operativos).Si desea ejecutar en múltiples plataformas, debe crear diferentes paquetes binarios para cada plataforma y compilarlos en programas ejecutables correspondientes al servidor operativo. versión del sistema, tales como: El programa exe de windows.
    • Lo que llamamos multiplataforma se refiere a la multiplataforma entre los sistemas operativos de 32 y 64 bits.

2> ¿Estilo de código?

  • El estilo de programación del lenguaje Java está muy orientado a objetos y proporciona muchas características orientadas a objetos, tales como: reescritura, sobrecarga, herencia, genéricos, proxy dinámico...
  • Go, basado en su principio de diseño **"keep it simple"**, es más conciso y puede lograr la misma función con menos código.

3> ¿Rendimiento de simultaneidad (utilización de CPU subyacente)?

  • Antes de la versión GO1.5, la capa inferior también se implementó en C al igual que Java.
  • Cuando nació JAVA (1995), no existían equipos con CPU multinúcleo a nivel de hardware, y posteriormente se añadió su soporte para concurrencia.
  • Cuando nació GO (2009), ya había computadoras con CPU multinúcleo, por lo que hizo un uso completo de las CPU multinúcleo en su diseño, por lo que admite mejor la alta concurrencia.

1. Lenguaje compilado o lenguaje interpretado

Los lenguajes de programación informática se pueden dividir en dos tipos: lenguajes compilados y lenguajes interpretados.

  • Tipo compilado: Compile el código fuente del programa con un compilador antes de ejecutar el programa y luego ejecútelo directamente con el resultado compilado.
  • Tipo de interpretación: cada vez que ejecuta un programa, necesita obtener el código fuente y dejar que el intérprete lo interprete y ejecute.

inserte la descripción de la imagen aquí

Go es un lenguaje compilado que debe empaquetarse en archivos ejecutables en diferentes tipos de sistemas operativos para ejecutarse en diferentes plataformas.

Java no es un lenguaje completamente compilado ni completamente interpretado, es un lenguaje semicompilado y semiinterpretado .

  • Semi-compilado : Significa que su código será compilado en un archivo de tipo clase, y solo necesita ser compilado una vez, y puede ser ejecutado en máquinas virtuales Java de diferentes sistemas operativos;
  • Semi-interpretación : Significa que en la máquina virtual Java, aún falta interpretar el código del archivo de clase frase por frase en el código ejecutable del sistema operativo correspondiente.

2. Comparación microscópica

1> Paso de parámetro de tipo de referencia

  • Go se puede pasar por valor (con un objeto como parámetro) o por referencia (con un puntero de objeto como parámetro).
  • Java solo se puede pasar por referencia

2> Funciones orientadas a objetos

  • Go se centra en una programación simple, sin aspectos, genéricos, herencia...
  • Java tiene muchas características orientadas a objetos.

Para conocer más diferencias a nivel micro entre el uso de los lenguajes Go y Java, consulte los artículos de seguimiento de la columna.

3. Ir a escenarios de aplicación

Un lenguaje de programación es solo una herramienta, no existe la mejor, solo la más adecuada.

1. Programación del servidor. Al igual que Java, el escenario de aplicación más común del lenguaje Go es el desarrollo de sistemas back-end de servidor, tales como: desarrollo de sistemas de microservicios (aplicación web, aplicación API), registros de procesamiento, empaquetado de datos, procesamiento de máquinas virtuales, sistema de archivos, etc.

2. Desarrollo de sistemas distribuidos. Por ejemplo: sistemas de clúster, servidores de juegos, agentes de bases de datos, middleware y otros escenarios.

3. Programación de redes. Go es muy adecuado para la programación en red que requiere alto rendimiento y alta concurrencia, y un sistema que usa Socket para transmitir datos entre sí, similar al uso de Netty en Java.

4. Desarrollo de plataforma nativa en la nube (sistema de gestión de operación y mantenimiento). En la actualidad, muchas plataformas en la nube extranjeras se desarrollan utilizando Go, como: Docker, K8s y muchas plataformas DevOps.

5. Desarrollo de sistemas de juego.

6. Desarrollo de cadenas de bloques. El lenguaje GO es el primer lenguaje de desarrollo de blockchain.

Los escenarios en los que el lenguaje Go no es adecuado son:

  • Fuerte software en tiempo real, como: comunicación de voz, conducción no tripulada, recolección de basura, asignación automática de memoria, etc.

1. Aplicaciones en código abierto

Tecnologías representativas en tecnologías nativas de la nube: docker, kubernetes, Prometheus, etcd y consul se desarrollan utilizando GO.

El autor estudia Go solo para ver el código fuente de estas tecnologías.

4. Resumen y seguimiento

Este artículo presenta principalmente algo de sentido común de Golang.

La columna presentará el uso del lenguaje Go por analogía con Java, y lo usará para iniciar la práctica y la lectura del código fuente de las tecnologías de código abierto nativas de la nube posteriores.

El siguiente artículo continúa con la construcción del entorno GO, el funcionamiento y el principio de funcionamiento del código Hello World.

Supongo que te gusta

Origin blog.csdn.net/Saintmm/article/details/130793052
Recomendado
Clasificación