ฉันเขียนเอนจิ้นเล็ก ๆ ใน Go for OSX (โดยใช้ OpenGl สำหรับหน้าต่างกราฟิก) ฉันมีประสบการณ์เกี่ยวกับเอ็นจิ้นเกม C ++ ( http://morganjeff.weebly.com/ ) และตัดสินใจลองใช้ Go หลังจากอ่านเกี่ยวกับฟีเจอร์บางอย่างที่มีให้
ในฐานะที่เป็นของ Go 1.1 ปล่อยไปได้รับการสนับสนุนสำหรับคุณสมบัติส่วนใหญ่ที่ฉันต้องการในการเขียนโปรแกรมเกม (จริงๆแกนเกมเป็นเครื่องมือที่แนะนำบรรณาธิการและสิ่งที่ไม่ได้) รวมถึง:
- การผูกฟังก์ชันของสมาชิก (สำหรับระบบการส่งข้อความ)
- Reflection มีอยู่แล้วภายใน (มีประโยชน์สำหรับการทำให้เป็นอนุกรมการสนับสนุนเครื่องมือภายนอก ฯลฯ )
- อินเทอร์เฟซ (สำหรับการนำพฤติกรรม polymorphic ไปใช้กับระบบส่วนประกอบ ฯลฯ )
ประโยชน์บางประการของการใช้งาน Go (สำหรับโครงการขนาดใหญ่):
- การทดสอบสร้างขึ้นในภาษา (ซึ่งรวมถึงการทดสอบเกณฑ์มาตรฐานและการยืนยันบางส่วน)
- ตัวอย่างง่ายต่อการเพิ่มภาษา (และพวกเขาจะรวบรวมเพื่อความถูกต้อง)
- โค้ดเฉพาะสถาปัตยกรรมนั้นง่ายต่อการเพิ่ม (ผ่านการตั้งชื่อไฟล์)
- การสร้างโปรไฟล์สร้างขึ้นเป็นภาษา
- การกำหนดเวอร์ชันการนำเข้าในตัว (อนุญาตให้เพิ่มไบนารีขนาดใหญ่ไปยังที่เก็บแยกต่างหากจากแหล่งที่มาในขณะที่ยังคงเวอร์ชันและเป็นปัจจุบัน)
ประโยชน์บางประการของการใช้งาน Go โดยทั่วไป:
- รหัส refactor ง่าย
- รองรับการทำเกลียว (ต่างจาก C ++ ซึ่งอยู่ด้านบน)
- ความเร็วในการรวบรวมที่รวดเร็วเป็นพิเศษช่วยลดความต้องการการสนับสนุนภาษาสคริปต์
- ระบบการพิมพ์แบบคงที่ (อินเทอร์เฟซที่พึงพอใจผ่านการพิมพ์เป็ด aka โดยนัย)
- ค่าที่ส่งคืนหลายพารามิเตอร์ที่มีชื่อแท็กแอตทริบิวต์ struct
- เครื่องมือและเอกสารในตัวที่ยอดเยี่ยม
- ภาษาที่จัดการ
ข้อเสียของการใช้ Go:
- ไม่มีมาโครหรือเทมเพลต
- ไม่มีห้องสมุดที่รองรับภาษาที่เป็นผู้ใหญ่มากกว่านี้
- ภาษาที่มีการจัดการ (มีวัตถุประสงค์สองรายการ)
- ไม่มี IDE
มีหลายวิธีในการรับหน่วยความจำแบบ raw (นำเข้า "ไม่ปลอดภัย") และฉันจะเชื่อมโยงบทความที่แสดงว่าโปรแกรม go สามารถทำโปรไฟล์สำหรับหน่วยความจำและความเร็วได้อย่างไร โดยสรุป Go อ้างว่ามันเป็น C ที่ทันสมัยดูเหมือนจริงมาก ฉันคิดว่ามันออกแบบ "ฉลาด" (ด้วยเหตุผลมากกว่าที่ฉันพูดถึง) และที่สำคัญกว่านั้นคือมีการบันทึกไว้อย่างดี เครื่องยนต์ที่ได้รับการออกแบบใน Go จะแตกต่างจากเครื่องยนต์ที่ออกแบบใน C ++ (สิ่งที่ฉันยังคุ้นเคยอยู่) แต่เครื่องยนต์ Go แก้ปัญหามากมายที่ไม่ได้รับการแก้ไขใน C ++ (เช่นขนาน ความซับซ้อนของภาษา C ++ และการใช้มรดกอย่างไม่ถูกต้อง)
นี่คือบทความที่ฉันสัญญา:
http://blog.golang.org/2011/06/profiling-go-programs.html
เจฟฟ์