你正在使用哪个版本的Go( go version
)?
$ go version go1.12.4 darwin/amd64
这个问题在最新版本中是否重现?
还没有测试过
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GOARCH="amd64"
GOBIN="/Users/tristian/go/bin"
GOCACHE="/Users/tristian/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/tristian/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/go/1.12.4/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.12.4/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/g1/v3hz1sm92nv7wbzpg3dx_h_h0000gp/T/go-build064001605=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
我正在使用最新的 gomobile
,从这个提交安装:
commit 32b2708ab17190067486adc3513cae8dc2a7e5a4 (HEAD -> master, origin/master, origin/HEAD)
Author: Mark Villacampa <m@markvillacampa.com>
Date: Thu May 9 10:20:13 2019 +0000
在我使用的go源代码中,我添加了一个作为Gomobile一部分公开的结构体类型。
type Config struct {
OSName string
OSDevice string
}
// NewConfig()
func NewConfig() *Config {
return &Config{}
}
在Swift代码中,我使用以下方式创建一个示例并设置一些字段。
// "Mobile" is the prefix package name
// var config = MobileNewConfig() (tried this too)
let config = MobileNewConfig()
config?.osName = "some name"
config?.osDevice = "some string"
我像这样构建框架:
GO111MODULE=off gomobile bind -a -v -target=ios/arm,ios/arm64,ios/amd64 example.com/mobile
你期望看到什么?
我期望看到 config
变量在swift代码中保留分配的字符串值。
你看到了什么?
相反, config
变量没有保留swift值,例如,请查看此调试器捕获:
6条答案
按热度按时间klh5stk11#
我已经创建了以下仓库来重现这个问题:
xjreopfe2#
我认为我已经找到了问题,基本上当我们使用以下命令将框架绑定时:
如果我们
cd
进入生成的objc文件,我们可以看到以下内容在src/gobind/Mobile_darwin.m
然而,
Label
属性访问器看起来像这样:kq4fsx7k3#
我已经更新了重现此问题的仓库:
如果将以下补丁应用到
gomobile
:golang/mobile@master...triztian:issue/32008
那么我们重新初始化:
gomobile init
,然后最后在重现问题中重新运行以下内容:可执行文件表现得像预期的那样,即我得到以下结果:
应用补丁后生成的 访问器 如下:
我会创建一个 PR ,但是如果我运行
go test ./bind
命令,许多测试针对golden
文件都会失败,例如./bind/testdata/doc.objc.m.golden
对于名为sf
的字段期望以下内容:我在此处找到了大小写规则:
@eliasnaur 我应该采取什么措施来创建一个可接受的 PR ?是否有特定的过程来更新黄金文件?
我认为这会影响遵循首字母缩略词命名规范的任何人,并且这是一个静默显现的问题。
jfgube3f4#
你可以使用以下命令更新golden文件:
23c0lvtd5#
感谢您的快速回复,我已经完成了这个操作,似乎已经修复了测试:
我在这里提交了一个PR:
y0u0uwnf6#
https://golang.org/cl/186978提到了这个问题:
bind: Fix setter name generation for ObjC