Golang移动开发:gomobile是否仍是构建SDK的可行方案

Golang移动开发:gomobile是否仍是构建SDK的可行方案 我们计划使用 gomobile 为我们的移动应用构建一个共享 SDK,并通过绑定使用它,Go 部分不涉及 UI,主要用于网络栈。然而,gomobile 的 GitHub 仓库看起来几乎没有活动。

有人知道 gomobile 是否仍在维护吗?gomobile 是一个可行的解决方案吗?如果不是,有什么替代方案?

谢谢

3 回复

Bao_Ho:

我们计划使用 gomobile 为我们的移动应用构建一个共享的 SDK,并通过绑定使用它,Go 部分不涉及 UI,主要用于网络栈。然而,看起来 gomobile 的 GitHub 仓库几乎没有活动。

有谁知道 gomobile 是否仍在维护?gomobile 是一个可行的解决方案吗?如果不是,有什么替代方案?

谢谢

你好,

对像 gomobile 这样的工具的维护状态感到担忧是可以理解的,尤其是在其 GitHub 仓库活动不多的情况下。虽然我无法提供其维护状态的实时更新,但值得注意的是,gomobile 是 Google Go 团队的官方工具,这使其具有一定的可靠性。

话虽如此,如果你正在寻找替代方案或想探索其他选项,可以考虑使用像 Flutter 或 React Native 这样的工具来为移动应用构建共享 SDK。这些框架提供了强大的网络功能,并且有活跃的社区支持其开发。

最终,选择取决于你具体的项目需求和偏好。如果 gomobile 满足你的需求,并且你对它当前的状态感到满意,那么它仍然可能是一个可行的解决方案。然而,如果你不确定或需要更积极的维护,探索替代方案可能是个好主意。

希望这能对你的决策过程有所帮助!

更多关于Golang移动开发:gomobile是否仍是构建SDK的可行方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我对它并不熟悉,所以请对我所说的一切持保留态度。但是——它看起来是实验性的

Go Mobile 项目是实验性的。使用风险自负。虽然我们正在努力改进它,但 Google 和 Go 团队都无法提供最终用户支持。

所以我可能不会在生产应用中使用它。看起来你可能会给自己带来麻烦。话虽如此,该项目有最近的活动,而且我想绑定相关的东西不会经常改变。这里也有一些讨论,以及这里的讨论。特别是这些评论:

Gomobile 对于简单的原生语言绑定效果很好(它本质上只是 cgo 的一个薄包装)。对于跨平台共享大量业务逻辑非常有帮助。但它在 API 表面复杂度方面有其局限性。

  • 库:这是 gomobile 的一个绝佳用途。用 Go 编写你的应用逻辑/数据库/网络请求。只用原生工具编写 UI。甚至可以在 Web 上通过 wasm 复用。

这些似乎证实了将其用于共享 SDK 会运行良好的想法。如果你真的决定尝试,我很想知道你在这方面的经验,因为我现在通常用 Flutter 构建移动应用,其网络栈并不理想。如果能与我的 API 和移动应用共享代码,那将是非常好的。

gomobile 目前仍然是构建跨平台 SDK 的可行方案,特别是对于网络栈等非 UI 功能。虽然其 GitHub 仓库的近期提交较少,但 Go 官方团队仍在维护关键更新,主要修复与 iOS/Android 新版本的兼容性问题。

以下是一个使用 gomobile 构建网络栈 SDK 的示例:

// sdk.go
package sdk

import (
    "context"
    "net/http"
)

type Client struct {
    httpClient *http.Client
}

func NewClient() *Client {
    return &Client{
        httpClient: &http.Client{},
    }
}

// 导出给移动端调用的方法
func (c *Client) FetchData(url string) (string, error) {
    req, err := http.NewRequestWithContext(context.Background(), "GET", url, nil)
    if err != nil {
        return "", err
    }
    
    resp, err := c.httpClient.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()
    
    // 处理响应数据
    return "processed data", nil
}

构建命令:

# 生成 Android 绑定
gomobile bind -target=android -o sdk.aar ./sdk

# 生成 iOS 绑定
gomobile bind -target=ios -o Sdk.framework ./sdk

替代方案考虑:

  1. CGO + JNI/FFI:通过 C 接口暴露 Go 功能,在 Android 使用 JNI,iOS 使用 C 接口调用
  2. gRPC:将 Go 服务作为独立进程运行,移动端通过 gRPC 通信
  3. UniFFI:Mozilla 的跨语言绑定框架,实验性支持 Go

对于纯网络栈场景,gomobile 的维护状态足够稳定,许多生产项目仍在继续使用。如果担心长期维护问题,可以在架构设计时保持接口抽象,便于未来迁移到其他方案。

回到顶部