وثائق واجهة برمجة التطبيقات: http://godoc.org/github.com/samuel/go-thrift
3-فقرة BSD. انظر ملف الترخيص.
Thrift هو IDL يمكن استخدامه لإنشاء روابط عميل RPC والخادم لمجموعة متنوعة من اللغات. تتضمن هذه الحزمة برامج ترميز العميل والخادم، والتسلسل، وإنشاء التعليمات البرمجية لـ Go. يحاول أن يكون رسم خرائط أكثر طبيعية للغة مقارنة بالتطبيقات الأخرى. على سبيل المثال، لدى Go بالفعل فكرة نقل التوفير في واجهات ReadWriteCloser.
ترتبط معظم الأنواع مباشرة بأنواع Go الأصلية، ولكن هناك بعض المراوغات والقيود.
يدعم Go مجموعة محدودة من أنواع مفاتيح الخريطة مقارنة بـ Thrift
لاستخدام مجموعة، قم بتعريف الحقل كـ []اكتب وقم بتوفير علامة "مجموعة":
StringSet []string `thrift:"1,set"`
[]يتم تشفير/فك تشفير البايت كسلسلة لأن النوع الثنائي Thrift هو نفس السلسلة الموجودة على السلك.
يتم استخدام حزمة Go net/rpc القياسية لتوفير RPC. على الرغم من أن أحد حالات عدم التوافق هو استخدام net/rpc لـ ServiceName.Method لتسمية أساليب RPC. للتغلب على هذه المشكلة، يبدأ Thrift ServerCodec أسماء الطرق بـ "Thrift".
لا توجد "فئات" نقل محددة كما هو الحال في معظم مكتبات Thrift. بدلاً من ذلك، يتم استخدام io.ReadWriteCloser
القياسي كواجهة. إذا كانت القيمة تنفذ أيضًا واجهة thrift.Flusher، فسيتم استدعاء Flush() error
بعد protocol.WriteMessageEnd
.
يتم دعم النقل ضمن إطار من خلال التفاف قيمة تنفيذ io.ReadWriteCloser
مع thrift.NewFramedReadWriteCloser(value)
يجب تمكين دعم الطلب أحادي الاتجاه في برنامج ترميز RPC بشكل صريح. السبب وراء عدم السماح بها افتراضيًا هو أن حزمة Go RPC لا تدعم فعليًا الطلبات أحادية الاتجاه. للتغلب على ذلك، يتطلب الأمر اختراقًا غير عادي لاستخدام القنوات لتتبع الطلبات المعلقة في برنامج الترميز والاستجابات المزيفة.
لم يتم تنفيذ الطلبات ذات الاتجاه الواحد حتى الآن على جانب الخادم.
يحتوي الدليل الفرعي "المحلل اللغوي" على محلل Thrift IDL، ويحتوي "المولد" على منشئ كود Go. ومن الممكن أن يمتد ليشمل لغات أخرى.
كيفية استخدام المولد:
$ go install github.com/samuel/go-thrift/generator
$ generator --help
Usage of generator:
-go.binarystring
Always use string for binary instead of []byte
-go.importprefix string
Prefix for Thrift-generated go package imports
-go.json.enumnum
For JSON marshal enums by number instead of name
-go.pointers
Make all fields pointers
-go.signedbytes
Interpret Thrift byte as Go signed int8 type
$ generator cassandra.thrift $GOPATH/src/