ข้าม​ไป​ยัง​เนื้อหา

Go จาก​ศูนย์ — เรียน​ภาษา​ที่​ตัดสิน​ใจน้อย​กว่า ด้วย​การ​สร้าง CLI จริง

Go ตัดสิน​ใจน้อย​กว่า​ภาษา​ที่​คุณ​เขียน​อยู่ — ไม่มี exception ไม่มี​การ​สืบทอด ไม่มี​ตัว​เลือก​ของ formatter และ​นั่น​คือ​ทั้ง​ข้อดี​และ​ราคา​ที่​ต้อง​จ่าย เรา​เรียน​ด้วย​การ​สร้าง CLI จริง​หนึ่ง​ตัว (orderctl) ที​ละ​บท ตั้งแต่ go mod init ผ่าน struct → JSON → slice/map → interface → error ที่​เป็น​ค่า จน​ประกอบ​เป็น​เครื่อง​มือ​ที่​มี​สถานะ​บน disk แล้ว​ปิด​ท้าย​ด้วย HTTP server กับ worker pool ที่​ยกเลิก​ได้ — standard library ล้วน ทุก​บท​บอก​ว่า Go เลือก​ต่าง​ตรง​ไหน และ​แลก​อะไร​ไป
ความคืบหน้า0 / 8 บทเรียน

แปดบท เรียง​ตาม​ลำดับ​ที่ orderctl โต​ขึ้น​ที​ละ​ชั้น

คุณ​เขียน​ภาษา​อื่น​เป็น​อยู่​แล้ว และ​อยาก​รู้​ว่า Go ตัดสิน​ใจ​ต่าง​ตรง​ไหน

คอร์ส​นี้​ไม่​ได้​เริ่ม​ที่ “ตัวแปร​คือ​อะไร” · มัน​สมมติ​ว่า​คุณ​เขียน C#, Java, TypeScript หรือ Python เป็น​อยู่​แล้ว แล้ว​อธิบาย Go ด้วย​การ​เทียบ​กับ​สิ่ง​ที่​คุณ​รู้

ทุก​บท​มี​อย่าง​น้อยห​นึ่ง​จุด​ที่​บอก​ว่า สิ่ง​ที่​คุณ​คาด​ว่า​จะ​เกิด กับ​สิ่ง​ที่​เกิด​จริง ต่าง​กัน​ตรง​ไหน เพราะ​จุด​ที่​เจ็บ​ที่สุด​เวลา​ย้าย​ภาษา ไม่ใช่​สิ่ง​ที่​ไม่รู้ แต่​เป็น​สิ่ง​ที่​คิด​ว่า​รู้​แล้ว

ของ​ชิ้น​เดียว​ที่​โต​ขึ้น​ทุก​บท ไม่ใช่​ตัว​อย่าง​เล่นๆ ที่​แยก​กัน​คนละ​บท

orderctl — เครื่อง​มือ​บรรทัด​คำ​สั่ง​ที่​ประมวล​ผล​ออ​เด​อร์​อาหาร

ไม่ใช่​ตัว​อย่าง​เล่นๆ ที่​แยก​กัน​คนละ​บท · มัน​เป็น​ของ​ชิ้น​เดียว​ที่​โต​ขึ้น​ทุก​บท จน​บท​สุดท้าย มัน​อ่า​นอ​อเด​อร์​จาก JSON ตรวจ​ความ​ถูก​ต้อง คิด​ส่วนลด เก็บ​สถานะ​ลง disk เปิด HTTP รับ​ออ​เด​อร์​ใหม่ และ​ประมวล​ผล​หลา​ยอ​อเด​อร์​พร้อม​กัน​โดย​ยกเลิก​กลาง​คัน​ได้

สาม​ข้อ​ที่​ตัด​ออก พร้อม​เหตุผล​ของ​แต่ละ​ข้อ

  • ไม่​ใช้ framework และ​ไม่​ใช้ ORM standard library ของ Go ทำ​สิ่ง​ที่​คอร์ส​นี้​ต้องการ​ได้​ครบ · การ​ใส่ dependency ตั้งแต่​วัน​แรก​ทำให้​แยก​ไม่​ออก​ว่า​อะไร​เป็น​ของ​ภาษา อะไร​เป็น​ของ library
  • ไม่​วัด​ความเร็ว คอร์ส​นี้​ไม่มี​ตัวเลข ns/op สัก​ตัว เพราะ​ตัวเลข​เวลา​ไม่​ข้าม​เครื่อง
  • ไม่​สอน generics ลึก แตะ​พอ​ให้​อ่าน standard library ออก แล้ว​บอก​ว่า​เมื่อไร​ไม่​ควร​ใช้