Section 11: Lab: จัดการ Error แบบ Go
- Error เป็นค่าที่คืนจากฟังก์ชัน และการสร้างด้วย errors.New และ fmt.Errorf
- Error Wrapping ด้วย %w และตรวจด้วย errors.Is และ errors.As
- สร้าง Error ชนิดของตัวเองและรวมหลาย Error ด้วย errors.Join
- panic และ recover ใช้เมื่อไร และเมื่อไรไม่ควรใช้
- Lab: อ่านไฟล์ข้อมูลพร้อมรายงานข้อผิดพลาดที่ชัดเจน
Section 12: Lab: Goroutine และ Channel
- Concurrency ต่างจาก Parallelism อย่างไร และ Goroutine ต่างจาก Thread อย่างไร
- เริ่ม Goroutine และรอให้เสร็จด้วย sync.WaitGroup และเมธอด Go
- Channel แบบมีและไม่มี Buffer, ทิศทางของ Channel และการปิด Channel
- รอหลาย Channel พร้อมกันด้วย select และการตั้ง Timeout
- Deadlock เกิดจากอะไรและป้องกันอย่างไร
Section 13: Lab: sync, context และ Worker Pool
- Race Condition และการตรวจด้วย go run -race
- ป้องกันข้อมูลร่วมด้วย sync.Mutex และ sync.RWMutex
- ยกเลิกงานและกำหนดเวลาหมดด้วย context
- รูปแบบ Worker Pool และ Pipeline ที่ใช้บ่อย
- Lab: ดาวน์โหลดหลายไฟล์พร้อมกันแบบจำกัดจำนวน Worker
Section 14: Lab: Package, Module และการเขียน Test
- แบ่งโค้ดเป็น Package และโครงสร้างโปรเจกต์ที่นิยม
- เพิ่ม Dependency ด้วย go get และจัดการด้วย go mod tidy
- เขียน Unit Test และ Table-Driven Test ด้วย go test
- วัดความครอบคลุมด้วย -cover และเขียน Benchmark
- Lab: เขียน Test ให้ฟังก์ชันที่สร้างไว้ตลอดหลักสูตร
Section 15: Workshop: เว็บเซอร์วิสด้วย net/http
- หลักการทำงานของ HTTP Request และ Response
- กำหนด Route ด้วย http.ServeMux แบบระบุ Method และ Path Parameter
- รับส่งข้อมูล JSON ด้วย encoding/json และแสดงหน้าเว็บด้วย html/template
- Workshop: เว็บเซอร์วิสจัดการรายการงานที่เก็บข้อมูลอย่างปลอดภัยเมื่อมีหลาย Request พร้อมกัน
- แนะนำเส้นทางต่อยอดสู่ REST API, ฐานข้อมูล และ Docker