พอดีเห็นหนังสือ Go in action ใน MEAP ของสำนักพิมพ์ Manning ปล่อยออกมาให้อ่าน
ก็เลยเอาบทที่ 1 มาอ่านซะหน่อย
จึงทำการสรุปรายละเอียดของหนังสือในบทที่ 1 แบบคร่าวๆ
โดยในบทแรกจะเป็นการอธิบายทความเป็นมาของ Go ทั้งหมด
รวมทั้งความสามารถต่างๆ และปิดท้ายด้วย Hello World ตามระเบียบ
ส่วนบทอื่นๆ ถ้าอยากอ่านต้องเสียเงินซื้อ …
หนังสือเล่มนี้กำลังอยู่ในช่วงเขียน
โดยตอนนี้ผู้เขียน เขียนเสร็จไปแล้ว 3 บท …
มาดูเนื้อหาในบทที่ 1 เรื่อง Introduction Go กันหน่อยมีอะไรบ้าง
โดยเริ่มอธิบายด้วยว่าทำไมต้องมีภาษาโปรแกรมมิ่งใหม่
ทั้ง static vs dynamic
ปัญหาเรื่องการจัดการ concurrency
เรื่องความสามารถของภาษา ที่ไม่ต้องนำ library อื่นๆ มาใช้งาน
โดย Go นั้นสร้างมาเพื่อแก้ไขปัญหาข้างต้น
พยายามนำเอาความสามารถของ dynamic language
และความปลอดภัยของ static language
เข้ามารวมกันเพื่อให้ดียิ่งขึ้นไป
ภาษา C, C++ นั้นทำงานได้อย่างรวดเร็ว
ภาษา Ruby, Python นั้นทำให้พัฒนาระบบงานได้อย่างรวดเร็ว
ส่วน Go เชื่อมระหว่าง 2 กลุ่มเข้าด้วยกัน ซึ่งทำให้ระบบที่พัฒนาด้วย Go นั้น
ทำงานได้อย่างรวดเร็ว และ พัฒนาระบบงานได้อย่างรวดเร็ว
keyword ใน Go จะมีน้อย เพื่อไม่ต้องจำมากนัก
การ compile ของ Go ใช้เวลาน้อยมาก
เนื่องจากในการ compile นั้น Compiler ของ Go
จะดูว่าโปรแกรมเราใช้อะไรตรงๆ
ไม่เข้าไปดูตามลำดับชั้นและ dependencies เหมือน C, C++ และ Java
ดังนั้นจึงไม่มีปัญหาในการ compile นานๆ
Go มีส่วนของ Concurency เข้ามาอยู่ในตัวมันเองเลย
ซึ่งประกอบไปด้วย Go runtine และ Channel
โดย Go runtime จะทำงานบน OS thread 1 หรือมากกว่า 1 ตัวก็ได้ ดังรูป
ส่วน Channel นั้นเอาไว้ส่งข้อมูลระหว่าง Go runtime
ต่อมาอธิบายเรื่อง Type System ซึ่งใช้แนวคิด Composition
ซึ่งแตกต่างจากภาษา C, C++, Java ที่เอาแนวคิดนี้ไปใช้งานร่วมกับการ inheritance
ทำให้ระบบมันมีความซับซ้อนมากขึ้น
และยากต่อการใช้งาน
ดังนั้นการ Composition ใน Go จึงเป็นการรวม type เล็กๆ เข้าด้วยกัน
ตัวอย่างการเปรียบเทียบ Inheritance กับ Composition เป็นดังรูป
Go interface ทำให้เราสามารถสร้างชนิดของข้อมูลขึ้นมา
พร้อมกับ behavior ที่เราต้องการใช้เท่านั้น
Go นั้นบอกว่า จัดการหน่วยความจำนั้นง่ายมากๆ
ไม่ต้องมากังวลเรื่อง garbage collector แล้วเพราะว่า Go จัดการให้หมด
ส่วนรายละเอียดจะอยุ่ในบทอื่นๆ อีกซึ่งหัวข้อของบทอื่นๆ มีดังนี้
- Introducing Go – FREE
- Go Quick Start – AVAILABLE
- Packaging and Tooling – AVAILABLE
- Data Structures
- Understanding Go’s Type System
- Putting Your Computer to Work With Concurrency
- Using the Go Standard Library
- Writing Network Applications in Go
- Debugging and Testing Go Programs
- Reflection
- Making Your Applications More Performant
- Interoperating with C Libraries
- Using Go for Devops
ส่วน code ตัวอย่างอยู่ที่ Github
Reference Website
http://goinactionbook.com/