Hasty Briefsbeta

双语

Using Go for Mobile Apps: A retrospective on a year of development with Gomobile

2 days ago
  • #flutter
  • #cross-platform-development
  • #go-mobile
  • 作者选择Go Mobile开发Digital Carrot是因为Go的跨平台能力及其强大的系统库(如Expr和Goja),便于定制化开发。
  • Go Mobile处理所有业务逻辑,Flutter负责UI,两者通过平台通道以二进制编码的Protobuf消息通信,确保无缝数据处理。
  • 单一API函数配合大型oneof区块简化了通信,避免了定义多个平台通道的需要,并减少了Swift和Kotlin间的代码重复。
  • Go与Swift/Kotlin的通信涉及在平台代码中实现Go接口,但仅支持基本数据类型,且Protobuf在此未被广泛使用。
  • 优势包括与基于Go的同步服务器的无缝集成、业务层与表现层的强分离、对丰富Go和Dart库的访问,以及具备网络能力的灵活部署API。
  • 缺点包括Protobuf序列化的性能开销、新增逻辑时复杂性增加、Go二进制文件导致应用体积增大,以及Flutter中双向通信和异步处理的挑战。
  • 遇到的问题包括Go Mobile的bug,如iOS上时区错误(默认GMT)和DNS查找故障,需通过XCode中链接libresolv等变通方案解决。
  • 总体而言,作者对Go Mobile满意,并愿意在特定场景中再次使用,尤其适合熟悉Go的团队或重度依赖Go服务及共享业务逻辑的应用。