34

Is it possible to write macOS/Cocoa applications in Google Go?

Is there a Go-Obj-C bridge? (it seems to me that Obj-C dynamism would be a great fit for Golang's interfaces)

Can I at least link the two together and make them talk to each other via plain-old C functions?

4

3 回答 3

11

CGo 使您能够调用 C 代码。

请参阅CGo 文档关于它的信息丰富的官方博客文章

似乎还没有可可绑定/库,但您可能需要查看GTK 包以供参考。

于 2011-06-12T13:58:46.950 回答
9

现在似乎没有将 Cocoa 绑定到 Go 的包。Cocoa 是用 Objective-C 编写的,它是 C 的超集。Objective-C 消息(或者至少曾经是,不确定现代编译器)被编译器转换为 C 函数调用,如下所示:

objc_msgSend(object, sel_getUid("foo:bar:err:"), var, var2, errVar);

所以绝对可以使用 Go 中的 Cocoa。

如果你遇到一个你想在 Go 应用程序中使用 Cocoa 的问题,恕我直言,请退后一步,想想你要解决的问题。Cocoa 大量使用命名参数,方法可以有很长的签名。这在 Objective-C 中运行良好,但我怀疑代码在 Go 中看起来是否一样好。另一方面,Go 解决了另一组问题。也许在 Go 中编写一个库(应用程序逻辑)并在 Objective-C/Cocoa 中编写 GUI 代码可以解决问题?

TL;DR:用 Go 编写模型,用 Objective-C 编写 GUI 代码怎么样?

于 2013-04-15T09:24:40.203 回答
2

你可以看看我的博文作为例子。恐怕我没有继续努力,但这里的源代码可以帮助您建立一个裸 Cocoa/ObjC/Go 项目。

正如自述文件中所提到的,你将能够做这样的事情。

package main

import (
  "github.com/alediaferia/gogoa"
)

func main() {
    app := gogoa.SharedApplication()
    window := gogoa.NewWindow(0, 0, 200, 200)
    window.SetTitle("Gogoga!")
    window.MakeKeyAndOrderFront()

    app.Run()
}
于 2016-03-02T14:38:10.823 回答