Go para aplicaciones móviles: lecciones de un año con Flutter y Go Mobile

Fuentes: Using Go for Mobile Apps

Este artículo recoge la experiencia de un año desarrollando Digital Carrot, una aplicación multiplataforma, con Go Mobile como capa de lógica de negocio y Flutter para la interfaz. El autor detalla por qué eligió esta combinación, cómo resuelve la comunicación entre ambos mundos y qué resultados ha obtenido en la práctica.

La arquitectura emplea llamadas de Flutter hacia código nativo Swift o Kotlin mediante platform channels, que reenvían mensajes binarios codificados con Protobuf a Go. De vuelta, Go puede invocar APIs nativas a través de interfaces implementadas en Swift o Kotlin. Protobuf resulta clave porque la comunicación entre Flutter, código de plataforma y Go solo admite tipos de datos básicos, y permite trabajar con structs y clases tipadas sin serialización manual en JSON. Para evitar definir un platform channel por cada función, el proyecto encapsula todas las llamadas en un único mensaje con un bloque oneof que identifica la API concreta.

Entre las ventajas destacan la integración natural con el servidor de sincronización, también escrito en Go, lo que permite ejecutar pruebas de integración con go test en menos de 20 segundos; una frontera clara entre lógica de negocio y presentación; el acceso a bibliotecas maduras de ambos ecosistemas; y la posibilidad de ejecutar la lógica sobre cualquier protocolo de red, lo que reduce el consumo de RAM a unos 30-60 MB en segundo plano. Como inconvenientes, el autor señala la sobrecarga de milisegundos por serialización de Protobuf en cada llamada y una mayor complejidad general al añadir nuevas funciones de negocio.