2016-04-04 15 views
6

ben git yazılmış ve bu yüzden böyle Python, Node.JS, Java ve Rubygit c-paylaşımlı kütüphane geri arama

gibi dillere tarafından çağrılabilir bir C shared library aşağı derlenmiş olacak bir kütüphane geliştirilmesi sürecinde am

Geri çekilme söz konusu olduğunda bir sorun olacağını anlamıştım. Yukarıdaki dillerden en az biri olacak arama koduna nasıl geri dönebilirim? Yapabileceğim tek bir yol var mı yoksa her bir dil için Go tarafında özel bir şey uygulamaya ihtiyacım olacak mı? netlik için

Güncelleme:

Zaten, Java ve Python gibi diğer dillerden kod kitaplık olarak Go kurmak ve yürütmek mümkün.

Sorum özellikle go uyumsuz bir şey çalıştıran ve geri arayan (yani Java, Python) içine çağırmak gerektiğinde bu durumla ilişkilidir.

cevap

3

Farklı programlama dilleri arasındaki arabirimin lingua franca C'den geçmektir. Git kodunuzu C üzerinden erişilebilir hale getirmek için cgo gibi bir şeyi kullanabilirsiniz, daha sonra C veya "yerel" bağlamalarını Python, Java, vb. onu çağır. Genellikle

geliştiriciler sadece büyük ve bakımlı projeler için bu kadar zahmete girsin. Eğer kişisel bir projeniz varsa ve performansınız daha az endişe duyuyorsa, json (web dilleri için) veya stdout/stderr boruları (muhtemelen daha ne istediğinizi) ile iletişim kurmanızı öneririm. Komutları Ruby'den stdout'a yazdırabilir ve Go kodunuzu isteğinizi gerçekleştirebilir ve stdout'unda tekrar raporlayabilirsiniz. Genellikle giriş ve çıkışları başka bir programa aktarmak zor olsa da genellikle mümkündür. CGI programları bu şekilde çalışır, diğer diller için tercümanları ve bu verileri yorumlayıcıya aktarır.

Güncelleme: geri git Java/Python/ne olursa olsun dil çalıştırma içine çağrılması nesneleri geçirmek istiyorsanız zordur; Bunun, bağlama API'sine (Java, Python) bağlı olarak farklı şekilde hazırlanmasının gerekeceğini düşünüyorum. Bağlantıları yerinde varsa, bu sorunu zaten çözdünüz mü? Geri çağırma işlemine herhangi bir parametrenin geçmemesiyle daha da kolaylaşırsanız (yani temelde bir zamanlayıcı geri çağrısı) daha kolay olabilir. Go'da üretilmesi gereken verileri en aza indirin ve diğer dilde okuyun.

+0

Lütfen güncelleştirme işlemini yapın. Zaten kütüphaneyi derleyebilir ve Java'dan arayabilirim fakat geri arama mekanizmasına ihtiyacım var. – conor

+0

Bu diller için tüm yerel API'leriniz var mı? Bunu yaparsanız, muhtemelen bir geriçağırımın nasıl çağrıldığı açık olacaktır. – dwks

+0

Hayır, PoC lib'lerinden başka geliştirilmiş bir şeyim yok. bağlayıcı çerçevelere bakacağım ve neyin yerinde olduğunu göreceğimi söyledi. Karmaşıklığı en aza indirmek için JSON kullanarak arayüz yapmayı planlıyorum. – conor

2

Eee, bu biraz paylaşılan Eğer C çağırabilir kütüphaneleri veya bu (piton, yakut, php, vs aka)

destekleyen herhangi bir dil üretebilir ancak Go 1.5 beri çoğunlukla bağlantı tek cevap olacak bir kukla piton testini yapmak için önce

http://blog.ralch.com/tutorial/golang-sharing-libraries/

  • bu benim bağlantı değil, ben kısaca izlediyseniz.
+1

OP'nin geri bildirimleri başka dillere mi sorduğunu tahmin ediyorum. Örneğin, Java'da yazılan doSomethingJava() 'yı varsa, bunu Go'dan nasıl çağırırız? Go koduna erişilebilmesini sağladı. C-paylaşılan lib'leri kullanarak Java, Go'ya erişebilir, ancak Java kodunda bir geri arama varsa, Go kodundan nasıl çağrılır? –

+0

@ a3.14_Infinity Hmm, büyük olasılıkla bir C kütüphanesine yapabileceğiniz şekilde çalışacaktır, ancak% 100 emin değilim. – OneOfOne

+0

@ a3.14_Infinity Evet, doğru sizsiniz :) – conor