36 votes

Liaisons Cocoa pour le langage Go

Est-il possible d'écrire des applications macOS/Cocoa dans Google Go ?

Existe-t-il un pont Go-Obj-C ? (il me semble que le dynamisme d'Obj-C s'adapterait parfaitement aux interfaces de Golang).

Puis-je au moins relier les deux et les faire communiquer entre eux via de simples fonctions C ?

0 votes

Hahaha... Le plus gros point faible de Go... l'interopérabilité.

0 votes

? C'est le cacao qui est natif du Mac, pas le Go.

4 votes

"Hahaha" quoi ? Le commentaire sur le "plus gros point faible" n'a pas de sens. Et même si c'était le cas, il n'y aurait pas de "hahaha" à ce sujet. Go a une excellente FFI C et il est très facile d'ajouter des liens Go à quelque chose (plus facile que beaucoup d'autres langages, comme Java ou même Python).

11voto

Kissaki Points 4000

CGo est ce qui vous permet d'appeler du code C.

Voir le CGo doc et l'informatif, article officiel sur le blog à ce sujet .

Il ne semble pas qu'il y ait encore de liaisons/bibliothèques de cacao, mais vous pouvez consulter le site Web de la Commission européenne. Paquet GTK pour référence.

3 votes

MonoMac devrait également donner une idée de la manière d'utiliser les appels C pour s'interfacer avec l'Objective-C.

9voto

Albin Stigo Points 180

Pour l'instant, il ne semble pas y avoir de paquetage pour lier Cocoa à Go. Cocoa est écrit en Objective-C, qui est un sur-ensemble du C. Les messages Objective-C sont (ou du moins l'étaient, je ne suis pas sûr des compilateurs modernes) traduits en appels de fonctions C par le compilateur, comme ceci :

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

Il est donc tout à fait possible d'utiliser Cocoa à partir de Go.

Si vous vous trouvez face à un problème où vous souhaitez utiliser Cocoa dans une application Go, prenez du recul et réfléchissez au problème que vous essayez de résoudre. Cocoa fait un usage intensif de paramètres nommés et les méthodes peuvent avoir des signatures assez longues. Cela fonctionne bien en Objective-C mais je doute que le code soit aussi beau en Go. D'un autre côté, le Go résout une autre série de problèmes. Peut-être qu'écrire une bibliothèque (logique d'application) en Go et du code d'interface graphique en Objective-C/Cocoa ferait l'affaire ?

TL;DR : Que diriez-vous d'écrire le modèle en Go et le code de l'interface graphique en Objective-C ?

6 votes

C'est exactement ce que j'envisage de faire pour un projet : Cocoa/ObjC pour l'interface graphique, écrire le modèle principal en Go. Comment feriez-vous ? J'ai cru comprendre qu'il existait une bibliothèque cgo pour appeler C de Go s'il est traité avec le compilateur Go, mais j'espérais qu'il y aurait un moyen, par exemple, de compiler un code exécutable avec Go, puis d'établir un lien avec la bibliothèque dans Cocoa, dans Xcode. Des suggestions ?

0 votes

"Au cours du cycle Go 1.4, GOOS=Android sera introduit dans le référentiel Go". Ce serait génial si GOOS=ios était aussi possible. Ainsi, il serait possible de lier le code Go dans l'interface graphique Cocoa/ObjC.

2voto

alediaferia Points 1790

Vous pouvez jeter un coup d'œil à l'article de mon blog à titre d'exemple . J'ai peur de ne pas avoir continué à travailler dessus, mais voici le code source qui peut vous aider à mettre en place un projet Cocoa/ObjC/Go nu.

Vous allez pouvoir faire quelque chose comme ça, comme mentionné dans le 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()
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X