เอกสาร API: http://godoc.org/github.com/samuel/go-thrift
BSD 3 ข้อ ดูไฟล์ใบอนุญาต
Thrift เป็น IDL ที่สามารถใช้เพื่อสร้างไคลเอ็นต์ RPC และการเชื่อมโยงเซิร์ฟเวอร์สำหรับภาษาต่างๆ แพ็คเกจนี้ประกอบด้วยตัวแปลงสัญญาณไคลเอ็นต์และเซิร์ฟเวอร์ การทำให้เป็นอนุกรม และการสร้างโค้ดสำหรับ Go มันพยายามที่จะแมปกับภาษาที่เป็นธรรมชาติมากขึ้นเมื่อเปรียบเทียบกับการใช้งานอื่น ๆ ตัวอย่างเช่น Go มีแนวคิดเรื่องการขนส่งแบบประหยัดในอินเทอร์เฟซ ReadWriteCloser อยู่แล้ว
ประเภทส่วนใหญ่จะแมปโดยตรงกับประเภท Go ดั้งเดิม แต่มีนิสัยและข้อจำกัดบางประการ
Go รองรับชุดประเภทคีย์แผนที่ที่จำกัดมากกว่า Thrift
หากต้องการใช้ชุด ให้กำหนดฟิลด์เป็นประเภท [] และระบุแท็ก "set":
StringSet []string `thrift:"1,set"`
[]ไบต์ได้รับการเข้ารหัส/ถอดรหัสเป็นสตริงเนื่องจากประเภทไบนารีของ Thrift เหมือนกับสตริงบนเส้นลวด
แพ็คเกจ Go net/rpc มาตรฐานใช้เพื่อจัดเตรียม RPC แม้ว่าความไม่เข้ากันประการหนึ่งคือการใช้ ServiceName.Method ของ net/rpc สำหรับการตั้งชื่อวิธี RPC เพื่อหลีกเลี่ยงปัญหานี้ Thrift ServerCodec จะเติมชื่อเมธอดด้วย "Thrift"
ไม่มี "คลาส" การคมนาคมที่เฉพาะเจาะจงเหมือนที่มีอยู่ในห้องสมุด Thrift ส่วนใหญ่ แต่จะใช้ io.ReadWriteCloser
มาตรฐานเป็นอินเทอร์เฟซแทน หากค่าดังกล่าวใช้อินเทอร์เฟซ thrift.Flusher ด้วย Flush() error
จะถูกเรียกหลังจาก protocol.WriteMessageEnd
การขนส่งแบบเฟรม ได้รับการสนับสนุนโดยการห่อค่าการนำ io.ReadWriteCloser
ไปใช้ด้วย thrift.NewFramedReadWriteCloser(value)
จำเป็นต้องเปิดใช้งานการสนับสนุนคำขอทางเดียวบนตัวแปลงสัญญาณ RPC อย่างชัดเจน เหตุผลที่ไม่ได้รับอนุญาตตามค่าเริ่มต้นคือเนื่องจากแพ็คเกจ Go RPC ไม่รองรับคำขอแบบทางเดียว เพื่อแก้ไขปัญหานี้ จำเป็นต้องมีการแฮ็กที่ค่อนข้างซับซ้อนในการใช้ช่องทางเพื่อติดตามคำขอที่รอดำเนินการในตัวแปลงสัญญาณและการตอบกลับที่แกล้งทำ
คำขอแบบทางเดียวยังไม่ได้ดำเนินการบนฝั่งเซิร์ฟเวอร์
ไดเรกทอรีย่อย "parser" มีตัวแยกวิเคราะห์ 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/