Opinionated Go 2026

Modern Go Engineering Practices

คอร์สแบบ opinionated สำหรับคนที่เขียน Go พื้นฐานได้แล้วและต้องการสร้าง service ที่อ่านง่าย ทดสอบได้ หยุดได้ และดูแลได้บน production พร้อมบอก default library ที่ควรรู้ เหตุผลที่เลือก และจุดที่ควรกลับมาใช้ standard library

28 บทเรียน7 partsSoftware Engineering

Course trail

เส้นทางการเรียน

Part 1 — Foundations and Judgment

Part 2 — Opinionated Go Style Guide

Part 3 — Language and Data Semantics

Part 4 — APIs and Boundaries

Part 5 — Concurrency That Stops

Part 6 — Evidence-Driven Quality

Part 7 — Production Engineering

วิธีอ่านคอร์สนี้

คอร์สนี้เป็น opinionated course ไม่ใช่เอกสารทางการของภาษา Go จุดประสงค์จึงไม่ใช่ การรวบรวมทุก syntax แต่คือช่วยให้คนที่เริ่มทำงานกับ Go ตัดสินใจได้ว่า production code ควรเขียนอย่างไร ใช้ library ใด และต้องพิสูจน์อะไรด้วย test หรือเครื่องมือ

  • Part 1 วางฐานเรื่อง convention, readability และ engineering judgment
  • Part 2 กลั่น Google และ Uber guides เป็น opinionated house style ที่ใช้ review ได้
  • Part 3 อธิบาย value, pointer, ownership และ collections ด้วย language semantics
  • Part 4 เปลี่ยนฐานเหล่านั้นเป็น package, API, error, context และ HTTP boundary
  • Part 5 สร้าง concurrency ที่อธิบายได้ว่าใครเริ่ม ใครหยุด และรับ load ได้เท่าไร
  • Part 6 ใช้ test, fuzzing, toolchain, organizational standards และ AI-assisted workflow สร้างหลักฐานว่า behavior ที่ออกแบบไว้ยังถูกต้อง
  • Part 7 เชื่อม MySQL, Redis, runtime lifecycle, observability และ performance เข้าด้วยกัน

ควรอ่านเรียงลำดับอย่างน้อยถึงบทที่ 18 หลังจากนั้นสามารถเลือกบทตามงานได้ แต่บท Capstone จะสมมติว่าคุณเข้าใจ contract, cancellation, bounded concurrency และ testing จากบทก่อนหน้าแล้ว

กลุ่มเป้าหมายและ baseline

ผู้อ่านควรเขียน function, struct, method, interface, goroutine และ test พื้นฐานได้ ตัวอย่างหลักกำหนด module ที่ go 1.25.0 และให้ใช้ latest patch ของ Go 1.26 เป็น toolchain ขณะเรียน เพื่อให้เห็น feature ปัจจุบันโดยยังทดสอบ compatibility กับ Go major ที่ support อยู่

Version เป็นส่วนหนึ่งของคำแนะนำ

Go, framework และ library เปลี่ยนต่อเนื่อง สถานะในคอร์สตรวจเมื่อ 12 สิงหาคม 2026 ก่อนนำ version หรือ API ไปใช้จริงต้องยืนยันกับ release notes และ security advisory อีกครั้ง ส่วน Go 1.27 ที่ยังเป็น draft ในวันที่ตรวจจะถูกพูดถึงเป็น release radar เท่านั้น

Running Project: Settlement Job Service

ทุกบทจะค่อย ๆ สร้าง mental model ของบริการสมมติชื่อ settlement บริการนี้รับ HTTP request เพื่อสร้าง batch, อ่านข้อมูลจาก MySQL, ใช้ Redis เก็บ derived state สำหรับหน้า status และส่งงาน ให้ worker ประมวลผลแบบจำกัด concurrency ใน Capstone เราจะประกอบสิ่งเหล่านี้เป็น service เดียว โดยไม่อ้างว่ามี folder structure หนึ่งที่เหมาะกับทุกทีม

MySQL เป็น authoritative state ของ batch ส่วน Redis เป็น cache หรือ read model ที่สร้างใหม่ได้ การตัดสินใจที่เปลี่ยนสถานะธุรกิจต้องอ่านและเขียนผ่าน authoritative boundary เสมอ

House Style และระดับของคำแนะนำ

เราใช้ Effective Go เป็นรากด้าน idiom แต่หน้าเอกสารระบุเองว่า ไม่ได้อัปเดตอย่าง active และไม่ครอบคลุม ecosystem สมัยใหม่ จึงประกบด้วย Google Go Style, Uber Go Style Guide, Go specification, package documentation, release notes และหลักฐานจาก production codebase บางแห่ง เช่น CockroachDB และ Kubernetes

ข้อความสำคัญจะแยกเป็น 4 ระดับ:

  1. Guarantee — สิ่งที่ language specification, memory model หรือ package contract รับรอง
  2. Recommended default — คำตอบเริ่มต้นของคอร์สสำหรับงาน production ทั่วไป
  3. Course convention — ข้อตกลงเพื่อให้ตัวอย่างทั้งคอร์สสม่ำเสมอ
  4. Trade-off — จุดที่ workload, team หรือ runtime อาจทำให้คำตอบเปลี่ยน

กฎจาก style guide จะไม่ถูกยกมาเป็นกฎของภาษา เช่น line length แบบตายตัวเป็น team convention ไม่ใช่ Go guarantee และคำแนะนำเก่าเรื่อง loop variable หรือ atomic operations ต้องตรวจเทียบกับ Go version ปัจจุบันก่อนเสมอ

Production Toolbox

จุดยืนของคอร์สคือ ใช้ established default และเข้าใจว่ามันทดแทนอะไร ถ้า standard library ตอบโจทย์ชัดเจน เราจะใช้มัน แต่ถ้า library ที่ mature ช่วยลดโค้ดซ้ำ ทำ contract ชัดขึ้น หรือปิดช่องผิดพลาดได้จริง เราจะบอกชื่อ library ไปตรง ๆ ไม่ปล่อยให้ผู้เรียนต้องค้นเองใหม่

แต่ละตัวเลือกจะถูกอธิบายด้วยคำถามชุดเดียวกัน: default คืออะไร, มันทดแทนอะไร, ใช้เมื่อไร, ควรหลีกเลี่ยงเมื่อไร, มี operational cost อะไร และมีทางเลือกใดบ้าง ตัวอย่างที่พบในคอร์สมี samber/lo, samber/do, samber/oops, samber/slog-multi, go-cmp, testify, oapi-codegen, go-redis/v9 และ testcontainers-go ส่วน samber/mo, ro และ hot จะเป็นเครื่องมือเฉพาะทาง ไม่ใช่ default ของทุกโปรเจกต์

เป้าหมายหลังเรียนจบ

คุณควร review Go service ได้โดยอธิบายจาก contract, ownership, lifecycle และ evidence ไม่ใช่ตอบเพียงว่า “ทีมอื่นก็เขียนแบบนี้” และควรรู้จัก library เจ้าประจำมากพอที่จะเลือกใช้ หรือปฏิเสธมันด้วยเหตุผลที่ตรวจสอบได้

แหล่งอ้างอิงหลัก

แหล่ง community ถูกใช้เป็นคำแนะนำและ production witness ไม่ใช่ authority ที่เหนือ specification เมื่อแหล่งข้อมูลขัดกัน คอร์สจะแสดง trade-off และประกาศ course default ให้ชัดเจน

คำอธิบายและตัวอย่างในคอร์สเขียนขึ้นใหม่โดยอ้าง provenance ของแต่ละแนวคิด Google styleguide เผยแพร่ ภายใต้ CC BY 3.0 และ Uber Go Style Guide เผยแพร่ภายใต้ Apache License 2.0 การอ้างชื่อใช้เพื่อบอกแหล่งที่มา เท่านั้น ไม่ได้หมายความว่าองค์กรดังกล่าวรับรองคอร์สนี้