Go คืออะไร ทำไมทีมยุคใหม่เลือกใช้
Go (หรือ Golang เวลาค้นหา) ออกแบบที่ Google โดย Rob Pike, Ken Thompson (คนสร้าง Unix/C) และ Robert Griesemer เปิดตัวปี 2009 เป้าหมายคือแก้ความเจ็บปวดของการเขียนซอฟต์แวร์ขนาดใหญ่: คอมไพล์ช้า, dependency ยุ่ง, concurrency ยาก, โค้ดอ่านยาก
Go อยู่ตรงไหน
- Cloud infrastructure — Docker, Kubernetes, Terraform, Prometheus, etcd ทั้งหมดเขียนด้วย Go
- Backend / API / microservices — บริษัทอย่าง Uber, Twitch, Cloudflare, Dropbox, PayPal
- CLI tools —
gh(GitHub CLI),hugo,kubectl - Network services — proxy, load balancer, message queue
Go เด่นในงาน “เซิร์ฟเวอร์ที่ต้องรับ request จำนวนมากพร้อมกัน” และ “เครื่องมือ CLI ที่ deploy ง่าย”
จุดขายของ Go
1. คอมไพล์เร็วมาก + binary เดี่ยว
go build -o myapp
./myapp # ไฟล์เดียว ไม่ต้องมี runtime, ไม่ต้องมี dependency บนเครื่องปลายทางโปรเจกต์ใหญ่คอมไพล์ในไม่กี่วินาที (เทียบ C++ ที่เป็นนาที) — ผลลัพธ์เป็น executable ตัวเดียว copy ไปวางบนเซิร์ฟเวอร์แล้วรันได้เลย ไม่ต้องลง Python/Java/Node
cross-compile ง่าย:
GOOS=linux GOARCH=arm64 go build # สร้าง binary สำหรับ Linux ARM จากเครื่อง Mac2. concurrency อยู่ในภาษา
go doSomething() // รัน doSomething เป็น goroutine — พร้อมกันกับโค้ดถัดไปgoroutine เบากว่า OS thread หลายเท่า — รันเป็นแสนตัวพร้อมกันได้ channel ใช้สื่อสารระหว่าง goroutine อย่างปลอดภัย
ch := make(chan string)
go func() { ch <- "เสร็จแล้ว" }()
msg := <-ch // รอรับค่าจาก goroutineนี่คือสิ่งที่ทำให้ Go เหมาะกับเซิร์ฟเวอร์ — จัดการ 10,000 connection พร้อมกันด้วยโค้ดที่อ่านเหมือน synchronous
3. ภาษาเล็ก เรียนจบเร็ว
Go มี keyword แค่ 25 คำ (C มี ~35, Java ~50) ไม่มี class, ไม่มี inheritance, ไม่มี exception, ไม่มี generics จนถึง 1.18, ไม่มี ternary operator ตั้งใจให้ “มีวิธีเดียวในการทำสิ่งหนึ่ง” — โค้ดของทุกคนหน้าตาคล้ายกัน อ่านง่าย
package main
import "fmt"
func main() {
fmt.Println("สวัสดีจาก Go")
}4. เครื่องมือมาในกล่อง
go fmt— จัดรูปแบบโค้ดอัตโนมัติ (ทุกคนใช้ style เดียวกัน ไม่มีการเถียง)go test— ทดสอบ + coverage + benchmark + fuzzinggo vet— หาบั๊กที่พบบ่อยgo build -race— จับ data racego mod— จัดการ dependencygo doc— เอกสาร
ไม่ต้องเลือก build tool / test framework / formatter — มีให้หมด
5. garbage collector
ต่างจาก C — Go จัดการหน่วยความจำให้ ไม่มี malloc/free, ไม่มี segfault จากการลืม (แทบจะ) GC ของ Go ปรับจูนมาให้ pause สั้นมาก (< 1ms) เหมาะกับ latency-sensitive service
Go เทียบภาษาอื่น
| Go | Python | Java | C | |
|---|---|---|---|---|
| ความเร็ว | เร็ว (compiled) | ช้า | เร็ว | เร็วที่สุด |
| deploy | binary เดี่ยว | ต้องมี interpreter | ต้องมี JVM | binary (ผูก OS) |
| concurrency | goroutine/channel ในภาษา | GIL จำกัด, async ยุ่ง | thread หนัก | pthread ด้วยมือ |
| memory | GC | GC | GC | ด้วยมือ |
| เรียนยากไหม | ง่าย (ภาษาเล็ก) | ง่าย | ปานกลาง | ยาก |
| เหมาะกับ | เซิร์ฟเวอร์, CLI, infra | data, script, AI | enterprise | systems, embedded |
สิ่งที่ Go จงใจไม่มี (และคนบ่น)
- ไม่มี exception — ใช้
return errแทน (verbose แต่ชัดเจน) - generics มาช้า (1.18, 2022) และยังจำกัด
- error handling ซ้ำ ๆ —
if err != nil { return err }เยอะ - ไม่มี enum แท้ — ใช้
const+iota interface{}/anyสมัยก่อนใช้เยอะจน type safety หลุด
ทีมออกแบบยอมรับ trade-off เหล่านี้เพื่อความเรียบง่ายและความสม่ำเสมอ
เรื่องที่คนมักพลาด
- คาดหวังว่า Go มี class/inheritance — ไม่มี ใช้ struct + interface + composition แทน (เฟส 3)
- คิดว่า goroutine = thread — เบากว่ามาก, Go scheduler จัดการเอง สร้างเป็นแสนตัวได้
- คิดว่า Go ช้าเพราะมี GC — เร็วพอสำหรับงานเซิร์ฟเวอร์ส่วนใหญ่ GC pause < 1ms
- มองว่า
if err != nilที่เยอะคือข้อเสีย — มันคือ feature: ทุก error ถูกจัดการอย่างชัดเจน ไม่มี “throw แล้วลืม catch” - คิดว่า Go เหมาะกับทุกงาน — ไม่เหมาะกับ data science/ML (ใช้ Python), งาน GUI, หรือ scripting เล็ก ๆ
สรุป
- Go = ภาษา compiled จาก Google เน้นความเรียบง่าย, คอมไพล์เร็ว, binary เดี่ยว, concurrency ในภาษา
- เหมาะกับ: backend/API, microservices, CLI tools, cloud infrastructure
- keyword แค่ 25 คำ, ไม่มี class/exception/inheritance — เรียนจบพื้นฐานได้ใน 1 สัปดาห์
- เครื่องมือครบในกล่อง:
go fmt/go test/go vet/go mod/ race detector - trade-off ที่ต้องรับ: error handling verbose, generics จำกัด, ไม่มี enum แท้
บทถัดไปเราจะติดตั้ง Go toolchain, รันโปรแกรมแรกด้วย go run, สร้าง module ด้วย go mod init และรู้จัก go fmt / go vet