De Python a Go (Golang)steemCreated with Sketch.

in #cervantes6 years ago


Logo de Python Logo de Go
Wikipedia

Hablemos un poco de mi experiencia con estos lenguajes de programación, mi objetivo no es establecer cual es mejor o peor porque, como sucede con cualquier herramienta, si se usa para lo que fue hecha y como se debe se pueden obtener resultados asombrosos. Python es el primer lenguaje que aprendí y con el que comencé mi aventura en el mundo de la programación por lo que le tengo gran estima, aunque en el camino conocí y use muchos otros. Es un lenguaje interpretado y de tipado dinámico, esas características son vistas como ventajas o desventajas según a quién le preguntes, especialmente por motivos de performance. Por otra parte, Go es un lenguaje compilado y de tipado estático. Ambos son de propósito general y multiparadigma, poseen una extensa librería estándar, son de código abierto, cuentan con un fuerte comunidad y mucha documentación. Sinceramente Go, por algunas características muy propias del lenguaje, no lo recomendaría para comenzar en la programación, a diferencia de Python, pero me parece un magnifico segundo lenguaje. Bueno, mucho texto, veamos el código.

Un Simple Hola Mundo

Lenguaje Go

package main

import "fmt"

func main() {
    // Este es un hola mundo en Go
    fmt.Println("Hola mundo")
}

Lenguaje Python

# Este es un hola mundo en Python
print("Hola mundo")

Variables y Funciones

Lenguaje Go

package main

import "fmt"

func saludar(name string) string {
    return "hola " + name
}

func main() {
    var nombre = "Orlando"
    fmt.Println(saludar(nombre))
}

Lenguaje Python

def saludar(nombre):
    return "Hola " + nombre

nombre = "Orlando"
print(saludar(nombre))

La diferencia más notable en lo que a sintaxis se refiere es que Go usa llaves para los bloques de código mientras que Python usa Indentación. Además del uso de la palabra reservada var para declarar una variable en Go. Dejando esos detalles de lado, ambos tienen una sintaxis bastante agradable a la vista, muy legible y, por experiencia, hacen del escribir código una experiencia placentera.

Como mencioné anteriormente, ambos cuentan con una gran comunidad, por lo que existe una enorme cantidad de librerías/paquetes libres para estudiar y utilizar. Además de herramientas que facilitan la instalación de dichos paquetes, como es el caso de pip para Python o el comando get en Go, he aquí un pequeño ejemplo

pip install flask

go get github.com/labstack/echo

Por si tienen curiosidad, en el ejemplo anterior el comando, en cada caso, permite instalar un popular framework web para cada lenguaje. Sí, ambos suelen utilizarse para el desarrollo web del lado del servidor, pero ese es un tema para otra ocasión. Por ahora nos concentraremos en las principales razones por las que algunas personas se quejan de los lenguajes. En el caso de Python, se dice suele que es lento: no voy a negar eso, se trata de un lenguaje interpretado, es lento comparado con otros lenguajes como C, aunque hay muchos factores a tomar en cuenta y varias alternativas para mejorar el performance (véase PyPy, no las estoy considerando para esta comparación. Para el uso que le he dado el lenguaje siempre me ha parecido lo suficientemente rápido en ejecución, e increíblemente ágil en los que respecta al desarrollo.

Ahora vayamos con Go, la principal queja que he escuchado/leído es que no es orientado a objetos: según Wikipedia, y estoy de acuerdo, si es un lenguaje orientado a objetos, sólo que de una manera bastante particular. Veamos un ejemplo.

Orientación a Objetos

Lenguaje Go

package main

import "fmt"

type Persona struct {
    Nombre string
    Edad   int
    Activo bool
}

func (p Persona) presentarse() {
    if p.Activo {
        fmt.Printf("Hola, mi nombre es %s y tengo %d años\n", p.Nombre, p.Edad)
    }
}

func main() {
    persona := Persona{"Orlando", 26, true}
    persona.presentarse()
}

Lenguaje Python

class Persona:

    def __init__(self, nombre, edad, activo):
        self.nombre = nombre
        self.edad = edad
        self.activo = activo

    def presentarse(self):
        if self.activo:
            print("Hola, mi nombre es {} y tengo {} años".format(
                self.nombre, self.edad))

persona = Persona("Orlando", 26, True)
persona.presentarse()

Como pueden ver es más una cosa de Pensar diferente, las estructuras no son clases pero cubren bastante bien las necesidades una vez que te acostumbras a ellas. En lo que a mi respecta, decidí pasarme completamente a Go, aún tengo mucho que aprender, pero eso no hace más que incrementar mi motivación. Aunque no lo hago porque sea mejor que Python, simplemente me parece mas adecuado para mis actuales intereses.

He usado muchos lenguajes en menor o mayor medida, y puedo decir que algunos me han gustado mas que otros, eso no los hace mejores o peores a menos que los compares en un contexto específico. Es decir, puede que el martillo sea tu herramienta favorita, pero algunas veces lo que necesitas hacer es aflojar una tuerca, espero me entiendan. Mi intención es que este sea el primero de una serie de artículos dedicados al lenguaje Go, me gustaría conocer su opinión, sea positiva o negativa. Estoy aprendiendo así que las críticas son bienvenidas, especialmente las constructivas.

Saludos, espero contar con su apoyo en esta aventura. Hasta la próxima.

Sort:  

Muy buen post, yo se un poco de python pero me gusto mucho ese lenguaje go nunca había escuchado hablar de el no se por que, voy a ver si aprendo ese lenguaje

Ambos son excelentes y tienen mas semejanzas que diferencias. Go es desarrollado por Google, es Open Source y su sintaxis está inspirada en el lenguaje C. Espero que te animes a aprenderlo.

Congratulations @orlmicron! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Congratulations @orlmicron! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 61467.71
ETH 3435.85
USDT 1.00
SBD 2.51