Java tiene una gran base de bibliotecas que han surgido en las últimas 2 décadas. Es difícil ser mejor que. Dicho esto, elegiré Go over Java cualquier día de la semana.
En cuanto a las preferencias personales, creo que la sintaxis más simple y los formatos de documentación son mejores. Odio la complejidad y Go ha tomado el enfoque más simple en ambos. La sintaxis se puede describir en un recorrido rápido y la definición del idioma no es tan larga para Go. El Javadoc automático actúa como si tuviera que obtener el máximo recuento de píxeles en cada página, blech. Combine eso con las rutas com.whatever.something.must.go.here.eventually.software y se vuelve tan denso que me pregunto cuánta productividad ha robado a lo largo de los años. Doble blech.
Al ser más técnicos, toman diferentes enfoques. Hay casos en los que cada uno ofrece ventajas y cada uno no. No puedo cubrirlos a todos, pero aquí hay algunos que se me ocurren cuando tomo mis decisiones. Dado eso, debes asumir algún sesgo.
- Estoy usando un teléfono moto e. Debido al escaso espacio en la memoria, quiero eliminar un par de aplicaciones raíz usando el removedor de aplicaciones raíz. ¿Es seguro?
- Voy a usar más de 100 imágenes en mi aplicación de Android. ¿Cómo restrinjo mi aplicación al tamaño mínimo?
- Mi papá no se siente cómodo con un teléfono inteligente y quiero regalarle un lindo teléfono. ¿Qué teléfono debería conseguirlo?
- Tengo un xolo q800. He puesto un bloqueo de pantalla, pero ahora olvidé la contraseña, ayúdame ... ¿qué puedo hacer para restablecer mi teléfono sin desbloquear mi contraseña?
- Si puedo hacer todo en Android que se puede hacer en iPhone, ¿por qué debería comprar iPhone?
Para la portabilidad, la JVM se trata de tener un entorno de tiempo de ejecución común que pueda ejecutar su archivo jar. A veces tienes que hacer frascos “Uber” que son enormes y tienen la cocina hundida en ellos, pero funciona. Go adopta el enfoque de que puede hacer que un ejecutable esté “súper” vinculado a su sistema. Seis de una manera, media docena de la otra. Me gusta el modelo Go porque no tengo que instalar la máquina virtual en tiempo de ejecución.
Administración de memoria, no son tan diferentes, pero Go parece ser más capaz de manejar una memoria grande. También proporciona mecanismos para bajar al nivel inferior sin saltar a través de JN [Vocal]. Siempre he visto que la JVM no funciona bien, ya que el tamaño del montón aumenta más allá de un puñado de GB. Ir parece hacerlo mejor, pero las pausas siguen ahí. Sé que ambos están mejorando las cosas, pero para espacios problemáticos que requieren 30-60 GB de RAM, no estoy seguro de cuán feliz estaría con Go, y no quiero saltar a través de los aros en llamas que requiere Java. Es curioso, realmente encuentro que Python / Cython es realmente bastante agradable en este espacio.
La concurrencia es la última gran. Java está diseñado con el hilo clásico como modelo básico. Llegaron lo suficientemente tarde al juego como para haberlo hecho mejor, pero así fue como las masas hicieron las cosas y Java siguió. Algunos de los lenguajes de JVM funcionan mucho mejor (me encanta Clojure), pero al mirar debajo de las cubiertas hay limitaciones para probar diferentes modelos que requieren fontanería. Solo mire lo que Clojure tiene que hacer para hacer posible la programación funcional pura porque la JVM no puede hacer algo tan simple como el TCO.
Go también dobló el modelo de hilo en sí mismo, pero ofrece un modelo CSP como alternativa. El modelo CSP es uno que prefiero por varias razones. Puedes conectarte en línea y buscar las discusiones sobre por qué esta es una excelente manera de hacer las cosas por ti mismo.
Finalmente, Go tiene un rendimiento decente, al igual que Java. Hay áreas donde ambos sufren, por lo que si buscas velocidad bruta, tampoco es el mejor lugar para pasar el tiempo. Java GC necesita mejorar, al igual que Go’s. El JVM JIT no siempre ofrece un gran rendimiento. Go tiene algunas verrugas debajo de las cubiertas que pueden ralentizarlo (¿por qué los canales tardan tanto?). En general, puede pasar tiempo y optimizar en cada entorno o puede ir a otro idioma. Me encanta la idea de a dónde va Julia. LuaJIT me ha quitado los calcetines en la velocidad bruta (aunque el modelo de memoria no está diseñado para grandes problemas sin al menos a través de pequeños aros). Finalmente, todavía programo en C y obtengo un rendimiento de nivel de sistema que es difícil de recrear.
Ir no es el objetivo correcto para hacer todo, y tampoco lo es Java. En el entorno de Android, tenía un ecosistema completo en Java y uno parcial en Go. Elija sabiamente y estará bien.