Esta es una buena pregunta. Hace poco tuve que responderla yo mismo. Tenía que desarrollar una aplicación tanto para iOS como para Android y necesitaba una solución para compartir la lógica de negocio y de vista en ambas aplicaciones. Al final decidí usar React Native en lugar de Go por varias razones que voy a explicar a continuación. También hay casos en los que elegiría Go por encima de otras soluciones, pero más adelante hablaré de ello.
Vamos a ver las posibilidades:
Todo Go App
Pierdes todo lo que proporcionan los Frameworks y tendrás que volver a escribir muchas cosas que ya están ahí. Esto puede ser una solución si quieres desarrollar un juego pero yo diría que es mejor ir con Unity u otros frameworks específicos para juegos.
Ios/Android nativo + lógica Go compartida
Al principio esto suena bien. Escribir la lógica de negocio una vez y solo invocar en tu código nativo. Funciona muy bien pero tiene algunas limitaciones. Por ejemplo, no puedes «exportar» trozos de structs. Normalmente presentamos listas de datos en las aplicaciones, así que este es el primer obstáculo. Lo que se necesitaría es algún tipo de «capa de comunicación» entre nativo y go. Esto también implicaría la serialización y deserialización. Esto significa que tendrás que escribir código nativo (Obj-C/Swift/Java) para comunicar tus vistas con la lógica de negocio. El segundo obstáculo para mí es que tendrás que duplicar la lógica de la vista. En este punto dejé de lado la idea de usar Go para las aplicaciones. Frameworks como react native resuelven exactamente este problema. Con react native puedes cambiar el rendimiento por la velocidad de desarrollo y mantenimiento. Con Go tendrás que escribir tu lógica de vista dos veces y tendrás que conectar tu vista a la lógica/estado dos veces. Si tu equipo es lo suficientemente grande esto podría ser una solución para ti.
SDK’s de plataformas cruzadas
Aquí es donde actualmente veo que Go brilla. Si por ejemplo proporcionas una api y quieres desarrollar un SDK multiplataforma para otros Go es una excelente solución. Por supuesto te enfrentarás a los mismos problemas que en todas las aplicaciones Go, las lonjas. Sin embargo, usted no tiene que lidiar con la lógica de la vista por lo que Go podría ser una solución impresionante para usted para ahorrar tiempo. Puedes incrustar fácilmente transporte http, websockets, manejo de bases de datos, etc. en el SDK.
Al final decidí usar react native para mi proyecto. Mis vistas son en su mayoría listas de datos y necesito la navegación. Estoy contento de cambiar algo de rendimiento por velocidad de desarrollo.
No estoy en los detalles pero si go mobile supera el problema de los slice sería mucho más útil para mucha gente. Dicho esto, creo que Go nunca mejorará cuando se trata de compartir la lógica de la vista así que realmente depende de tu caso de uso si quieres usar Go en tu proyecto de aplicación.