Yaegi คืออะไร
โดยทั่วไปแล้ว golang เป็น compiled-language (ต้องมีการคอมไพล์โปรแกรมก่อนถึงจะสามารถใช้งานได้) ในบางสถานการณ์เราต้องการทำให้ code ของเราสามารถใช้งานในรูปแบบที่มันยืดหยุ่นได้ ยกตัวอย่าง เช่น เขียนระบบให้ user สามารถออกแบบหรือแก้ไขการทำงานของโค๊ดบางส่วนได้เองโดยไม่ต้องคอมไพล์โปรแกรมใหม่ทุกครั้ง สิ่งนี้จึงทำให้เกิดโปรเจ็กต์ yaegi ขึ้น (ดูแลโดยทีมงานของ Containous (traefik)) โดยตัว yaegi เองนี้ สามารถทำการรับ script golang ที่เป็น string เข้ามาและทำการสั่งรัน เพื่อรับค่าผลลัพธ์ได้ อีกทั้งยังสามารถใช้งาน import ใน script นั้นๆ ได้อีกด้วย
การใช้งาน Yaegi
ตัวอย่างการใช้งาน yaegi เบื้องต้น ตัวอย่างเป็นการทดลอง สร้าง package foo ที่มี function bar รับค่า input เป็น string และคืนค่า output เป็น string
- ทำการเรียก code script ที่ต้องการโดยใช้ i.Eval(src)
- ใช้ v, err := i.Eval(“foo.Bar”) เพื่อสร้างตัวแปรสำหรับรับข้อมูลที่ได้จาก interpreter context จากข้อที่ 1
- ทำการแปลง type assertion ให้ v โดยให้ตรงกับ type function ที่เราต้องการ ทีเราต้องการคือ func(string) string แลละเก็บค่าไว้ใน bar
- เพียงเท่านี้ เราก็จะได้ func bar(string) string แบบที่เราต้องการและสามารถทำการเรียกใช้ได้ด้วยโดยใช้ bar(“Kung”)
|
|
ไอเดียในการนำ yaegi ไปใช้งาน
ที่เห็นได้ชัดจะเป็นการนำมาใช้สำหรับการทำ custom plugin for api gateway ต่างๆ ที่ทำให้เราสามารถเขียน plugin ด้วย golang ที่ยืดหยุ่นมากๆ และนำสคริปที่เขียนไปใช้งานได้เลย
Reference Link
Yaegi repository : https://github.com/traefik/yaegi
อย่าลืมให้กำลังใจสล็อตด้วยการกดไลค์ กดแชร์บทความ กดติดตามเพจ Sloth Coding ด้วยนะฮะ ขอบคุณฮะ ;)