Golang - 用于结构返回类型跨平台 slice 的 GoMobile 工具

标签 go cross-platform gomobile

在跨平台移动应用程序开发过程中,我遇到了 Golang,它有一个 GoMobile 命令行工具,可以生成语言绑定(bind),从而可以从 Java 和 Objective-C 调用 Go 函数。但是,导出的函数/方法中使用的类型有一些限制,如下所述:https://godoc.org/golang.org/x/mobile/cmd/gobind#hdr-Type_restrictions

关于支持导出函数中使用的数据类型中的结构 slice (结构数组)的工作有什么想法

最佳答案

使用 String 的解决方法举个例子:

type StringCollection interface {
    Add(s string) StringCollection
    Get(i int) string
    Size() int
}

// TODO solve this with generics
type StringArray struct {
    items []string
}

func (array StringArray) Add(s string) StringArray {
    array.items = append(array.items, s)
    return array
}

func (array StringArray) Get(i int) string {
    return array.items[i]
}

func (array StringArray) Size() int {
    return len(array.items)
}

Go 中的用法:

func GetExampleStringArray() *StringArray {
    strings := []string{"example1", "example2"}
    return &StringArray{items: strings}
}

在 Android 上,您可以使用此扩展将其转换为 List<String> :

fun StringArray.toStringList(): List<String> {
    val list = mutableListOf<String>()
    for (i in 0 until size()) {
        list.add(get(i))
    }
    return list
}

fun main() {
    GoPackage.getExampleStringArray().toStringList()
}

关于Golang - 用于结构返回类型跨平台 slice 的 GoMobile 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44382115/

相关文章:

http - 标准库 http 包默认记录到 stdout,我可以禁用它吗?

Go 返回结构键值

cross-platform - PCL将镜像文件保存到本地文件系统

bash - 如何检查是否在 Cygwin、Mac 或 Linux 中运行?

bash - 编写跨平台 shell 脚本的最佳方法是什么

xcode - GOMobile "event/touch"包

import - 去+ revel : How to import custom package?

go-swagger - 找不到 swagger 服务命令

go - 如何在非本地包中本地导入错误

go - os.Create 和 os.Open 不能与 gomobile 一起使用并 react native