【问题标题】:Gomobile bind: unsupported basic type: uint64Gomobile 绑定:不支持的基本类型:uint64
【发布时间】:2018-01-20 09:20:14
【问题描述】:

文档说应该支持它。 它似乎没有在 gen.go 文件中实现:

case types.Uint8: // types.Byte
        return "uint8_t"
    // TODO(crawshaw): case types.Uint, types.Uint16, types.Uint32, types.Uint64:

我读到我需要修补 go mobile 以支持 但是改文件支持Ui​​nt64后,(go/src/golang.org/x/mobile/bind/gen.go) 然后重新初始化 go mobile:gomobile init

同样的错误仍然出现,我在这里遗漏了一些明显的东西吗?

【问题讨论】:

  • 您在哪里读到需要修补 Go Mobile?你遵循了哪个程序?请提供完整信息。

标签: go gomobile


【解决方案1】:

我认为这里的问题是 Java 没有未签名的。因此,Java 接口不能将 uint64(和 uint32 IIRC)文件类型作为全局变量、函数返回值或函数参数。

您可以在 Go 移动版中使用 uint64。

基于以上两种解决方案:

  1. 将非法类型暴露给 Java 的可能性降至最低
  2. 在 Go 中将 uint64 转换为 int64,在 Java 中从 long 转换为 BigInteger。

【讨论】:

    【解决方案2】:

    受 StackOverflow 帖子的启发,我通过修补 Go mobile 解决了这个问题!我非常松散地使用“补丁”,我不鼓励任何人使用此代码,因为它非常针对特定目的。

    我只是将default 的情况短路以返回uint64 - 您可以在这里看到我所做的确切操作:https://github.com/Sidetalker/mobile/commit/01eb11be69a781e71c7f00df6fc17b35f828f7a2

    我需要进行一些其他查找/替换更改,您可以在该分支上看到它以使其正确构建,并且我还必须修复我很确定是 byte 类型的 Go 移动错误.所有这些都可以在分支上看到。

    此外,至关重要的是,我必须完全 go get 这个项目 - 进行更改并运行 gomobile init 是不够的。

    不要使用此代码。请将此标记为已回答。

    【讨论】:

    • 嘿,我最终修复了这个,我更改了 gen.go 文件,我不得不通过“go install...”重新编译
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2015-09-13
    相关资源
    最近更新 更多