在golang中导入OSX包?

时间:2015-09-15 20:28:29

标签: macos go

所以,在python中,如果我想访问一个OSX包,我可以像这样使用objc模块:

import objc
objc.loadBundle('CoreWLAN', 
       bundle_path='/System/Library/Frameworks/CoreWLAN.framework', 
       module_globals=globals())

在golang中是否有一种优雅的方法可以使用模块?谷歌找不到我。我是否必须使用该语言的C导入功能来调用此功能?这甚至可能吗?

我的具体情况是,我想阅读有关可用接入点,频道,信号强度和信噪比的WIFI数据,以便与Google Maps Geolocation API进行通信。

1 个答案:

答案 0 :(得分:2)

Andlabs给出了一个很好的回答,遗憾的是他没有作为回答。

基本上你这样使用cgo ......

//cgo LDFLAGS: -framework CoreWLAN

...您可以直接调用框架。引用他的回答:

  

.framework包在其顶层包含动态加载的库。对于系统框架,此动态加载的库的文件名是框架的基本名称,并且没有典型的.dylib扩展名。如果您愿意直接使用libdl,这意味着cgo,您可以动态加载此dylib并直接调用其函数。但是既然我们现在正在使用cgo,那么有一种更好的方法:// cgo LDFLAGS:-framework CoreWLAN然后直接从cgo使用API​​。 - andlabs

     

事实上,看看它,CoreWLAN的API是基于Objective-C的,所以你别无选择,只能使用cgo并执行我所说的后者:/(不要尝试使用Objective-C运行时API直接;这导致冗长,不安全和不可移植的代码。) - andlabs