Привязки какао для языка Go - PullRequest
33 голосов
/ 12 июня 2011

Можно ли писать приложения для Mac OS X / Cocoa в Google Go?

Есть ли мост Go-Obj-C? (мне кажется, что динамизм Obj-C отлично подошел бы для интерфейсов Голанга)

Могу ли я хотя бы связать их вместе и заставить их общаться друг с другом с помощью простых старых функций C?

Ответы [ 3 ]

11 голосов
/ 12 июня 2011

CGo - это то, что позволяет вам вызывать код C.

См. CGo doc и информативное официальное сообщение в блоге об этом .

Кажется, пока нет привязок / библиотек какао, но вы можете проверить *1000* пакет GTK для справки.

9 голосов
/ 15 апреля 2013

В данный момент, похоже, нет пакета для привязки Cocoa к Go.Какао написано в Objective-C, который является надмножеством C. Сообщения Objective-C (или, по крайней мере, раньше, не уверен в современных компиляторах) транслируются компилятором в вызовы функций C, примерно так:

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

Так что определенно возможно использовать Какао из Go.

Если вы столкнулись с проблемой, в которой вы хотели бы использовать Какао в приложении Go, ИМХО сделайте шаг назад иподумайте о проблеме, которую вы пытаетесь решить.Какао интенсивно использует именованные параметры, а методы могут иметь довольно длинные подписи.Это хорошо работает в Objective-C, но я сомневаюсь, что код будет выглядеть так же хорошо в Go.С другой стороны, Go решает еще одну проблему.Может быть, написание библиотеки (логики приложения) на Go и кода GUI в Objective-C / Cocoa сработает?

TL; DR: Как насчет написания модели на Go и кода GUI вObjective-C

2 голосов
/ 02 марта 2016

Вы можете посмотреть мой пост в качестве примера .Боюсь, я не продолжал работать над этим, но вот исходный код , который может помочь вам настроить голый проект Cocoa / ObjC / Go.

Вы будетев состоянии сделать что-то подобное, как указано в README.

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()
}
...