the programming programador programacion lenguaje golang developer descargar codigofacilito aprender cocoa go cocoa-bindings scripting-bridge

cocoa - programming - programador go



Encuadernaciones de cacao para el lenguaje Go (3)

¿Es posible escribir aplicaciones Mac OS X / Cocoa en Google Go?

¿Hay un puente Go-Obj-C? (Me parece que el dinamismo Obj-C sería una gran opción para las interfaces de Golang)

¿Al menos puedo unir los dos y hacer que se comuniquen entre sí a través de las funciones simples de C?



En este momento no parece haber un paquete para enlazar Cocoa to Go. Cocoa está escrito en Objective-C, que es un superconjunto de C. Los mensajes de Objective-C son (o al menos solían ser, no están seguros de los compiladores modernos) traducidos a llamadas de función C por el compilador, a algo como esto:

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

Por lo tanto, definitivamente es posible usar Cocoa de Go.

Si te encuentras con un problema en el que encuentras que te gustaría utilizar Cocoa en una aplicación Go, en mi humilde opinión dar un paso atrás y pensar en el problema que estás tratando de resolver. Cocoa hace un uso intensivo de los parámetros nombrados y los métodos pueden tener firmas bastante largas. Esto funciona bien en Objective-C pero dudo que el código se vea tan bien en Go. Por otro lado, Go resuelve otro conjunto de problemas. Tal vez escribir una biblioteca (lógica de aplicación) en el código Go y GUI en Objective-C / Cocoa haría el truco?

TL; DR: ¿Qué hay de escribir el modelo en Go y el código GUI en Objective-C?


Puedes echar un vistazo a la publicación de mi blog como ejemplo . Me temo que no seguí trabajando en ello, pero aquí está el código fuente que puede ayudarte a configurar un proyecto de Cocoa / ObjC / Go.

Podrás hacer algo como esto, como se menciona en el archivo 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() }