กลับสู่คอร์สเรียน
AI017 Professional

เริ่มต้นเขียนโปรแกรมด้วยภาษา Go

บทเรียนที่เหมาะกับผู้เริ่มต้นและมีประสบการณ์จริงเกี่ยวกับภาษาโปรแกรมมิ่ง Go โดยจัดเป็นบทเรียนเล็กๆ ที่จัดการได้ง่าย มีธีมการสำรวจอวกาศ ครอบคลุมหัวข้อการเขียนโปรแกรมแบบบังคับ ชนิดข้อมูล ฟังก์ชัน เมธอด เซ็ตข้อมูล สถานะ และการประมวลผลพร้อมกัน

4.9
24.0h
749 ผู้เรียน
0 การถูกใจ
ปัญญาประดิษฐ์
เริ่มเรียน

ภาพรวมคอร์สเรียน

📚 สรุปเนื้อหา

บทเรียนที่เข้าใจง่ายและใช้งานจริงสำหรับผู้เริ่มต้นกับภาษาโปรแกรม Go หลักสูตรนี้จัดทำเป็นบทเรียนเล็กๆ ที่จัดการได้ พร้อมธีมการสำรวจอวกาศ ครอบคลุมหัวข้อเกี่ยวกับการเขียนโปรแกรมเชิงบังคับ ประเภทข้อมูล ฟังก์ชัน เมธอด โครงสร้างข้อมูล สถานะ และความขนาน (concurrency)

ค้นพบความสนุกของการเขียนโค้ดด้วยภาษา Go ผ่านบทเรียนเล็กๆ และโครงการปลายทางทั้งหมด 7 โปรเจกต์ที่เกี่ยวข้องกับการเดินทางในอวกาศ

ผู้เขียน: นาธาน ยังแมน, โรเจอร์ เปปเป้

ขอบคุณ: เจนนิเฟอร์ สตาวต์, มารีนา มิคาเอลส์, เมธาเวอร์ มิร์เคส, โจเอล โคตาร์สกี, อเล็กซานดาร์ ดรากอสฟเยวิช, รีนี ฟรานซ์, โอลกา ชาลาฆินา, เอริก ซีลยา, เอบริล มิลน์, มอนิกา แคมสวาอา

🎯 เป้าหมายการเรียนรู้

  1. นิยามภาษาโปรแกรม Go และกรณีการใช้งานหลักของมัน
  2. อธิบายบทบาทของคอมไพเลอร์ภาษา Go และข้อดีเหนือตัวแปลโปรแกรม (interpreter)
  3. ใช้งาน Go Playground เพื่อเขียน คอมไพล์ และรันโค้ด
  4. จัดโครงสร้างโค้ดภาษา Go อย่างถูกต้องตาม "สไตล์เครื่องหมายวงเล็บแบบเดียว" ที่จำเป็น เพื่อหลีกเลี่ยงข้อผิดพลาดทางไวยากรณ์
  5. จัดการข้อมูลโดยใช้เทคนิคการประกาศตัวแปรต่างๆ และตัวดำเนินการรวมค่าทางคณิตศาสตร์
  6. สร้างเลขสุ่มเทียม และนำตรรกะเงื่อนไขมาใช้ผ่านการแยกทาง (branching) และตัวดำเนินการตรรกะ
  7. ประกาศและจัดรูปแบบตัวแปรทศนิยมโดยใช้ float32 และ float64 พร้อมขนาดและความแม่นยำเฉพาะ
  8. ระบุและลดผลกระทบจากข้อผิดพลาดที่เกิดจากความไม่แม่นยำของเลขทศนิยมและค่าเต็มที่เกินขอบเขต (integer wrap-around)
  9. ใช้แพ็กเกจ big และค่าคงที่ไม่มีประเภท (untyped constants) เพื่อจัดการกับจำนวนที่เกินขีดจำกัดขนาดบิตมาตรฐาน
  10. กำหนดและเรียกใช้ฟังก์ชันโดยใช้พารามิเตอร์ อาร์กิวเมนต์ และไวยากรณ์แบบตัวแปร (variadic syntax)

🔹 บทเรียนที่ 1: ออกจากโลกสู่วงโคจร

ภาพรวม: บทเรียนนี้แนะนำภาษา Go ซึ่งเป็นภาษาโปรแกรมสมัยใหม่ที่ใช้กันอย่างแพร่หลายในระบบคลาวด์ นักเรียนจะได้เรียนรู้ความแตกต่างพื้นฐานระหว่างภาษา Go ที่ถูกคอมไพล์ กับภาษาที่ถูกแปลความ (interpreted) การใช้งาน Go Playground เพื่อทดลองเขียนโค้ดทันที และโครงสร้างพื้นฐานของโปรแกรมภาษา Go ที่เกี่ยวข้องกับแพ็กเกจและฟังก์ชัน main

ผลการเรียนรู้:

  • นิยามภาษาโปรแกรม Go และกรณีการใช้งานหลักของมัน
  • อธิบายบทบาทของคอมไพเลอร์ภาษา Go และข้อดีเหนือตัวแปลโปรแกรม (interpreter)
  • ใช้งาน Go Playground เพื่อเขียน คอมไพล์ และรันโค้ด

🔹 บทเรียนที่ 2: ตรรกะศูนย์ควบคุมภารกิจ

ภาพรวม: บทเรียนนี้แนะนำหัวใจสำคัญของการเขียนโปรแกรมด้วยภาษา Go โดยเน้นที่การจัดโครงสร้างโค้ดและการควบคุมลำดับการทำงาน นักเรียนจะได้เรียนรู้ "สไตล์เครื่องหมายวงเล็บแบบเดียว" และจุดเริ่มต้นของโปรแกรม แล้วค่อยๆ เข้าสู่เทคนิคการประกาศตัวแปรที่รวดเร็ว ตัวดำเนินการทางคณิตศาสตร์ และจบลงด้วยตรรกะการตัดสินใจโดยใช้ค่าบูลีน การเปรียบเทียบ และการแยกทาง (branching)

ผลการเรียนรู้:

  • จัดโครงสร้างโค้ดภาษา Go อย่างถูกต้องตาม "สไตล์เครื่องหมายวงเล็บแบบเดียว" ที่จำเป็น เพื่อหลีกเลี่ยงข้อผิดพลาดทางไวยากรณ์
  • จัดการข้อมูลโดยใช้เทคนิคการประกาศตัวแปรต่างๆ และตัวดำเนินการรวมค่าทางคณิตศาสตร์
  • สร้างเลขสุ่มเทียม และนำตรรกะเงื่อนไขมาใช้ผ่านการแยกทาง (branching) และตัวดำเนินการตรรกะ

🔹 บทเรียนที่ 3: ฟิสิกส์ของข้อมูลอวกาศ

ภาพรวม: บทเรียนนี้สำรวจวิธีที่ภาษา Go จัดการกับข้อมูลตัวเลข ตั้งแต่ความละเอียดของเลขทศนิยม ไปจนถึงขนาดที่ใหญ่มากเพื่อใช้คำนวณระยะทางในจักรวาล นักเรียนจะได้เรียนรู้การจัดการข้อจำกัดของหน่วยความจำคอมพิวเตอร์ เช่น ความไม่แม่นยำของเลขทศนิยม และค่าเต็มที่เกินขอบเขต (integer wrap-around) พร้อมทักษะในการแปลงประเภทอย่างชัดเจน และการใช้แพ็กเกจ big เพื่อจัดการกับขนาดตัวเลขที่แปลกประหลาด

ผลการเรียนรู้:

  • ประกาศและจัดรูปแบบตัวแปรทศนิยมโดยใช้ float32 และ float64 พร้อมขนาดและความแม่นยำเฉพาะ
  • ระบุและลดผลกระทบจากข้อผิดพลาดที่เกิดจากความไม่แม่นยำของเลขทศนิยมและค่าเต็มที่เกินขอบเขต (integer wrap-around)
  • ใช้แพ็กเกจ big และค่าคงที่ไม่มีประเภท (untyped constants) เพื่อจัดการกับจำนวนที่เกินขีดจำกัดขนาดบิตมาตรฐาน

🔹 บทเรียนที่ 4: สร้างโมดูลที่แยกจากกันได้

ภาพรวม: บทเรียนนี้กล่าวถึงหัวใจสำคัญของโปรแกรมภาษา Go ได้แก่ ฟังก์ชัน ประเภทที่กำหนดเอง และเมธอด นักเรียนจะได้เรียนรู้วิธีการห่อหุ้มตรรกะเพื่อใช้ซ้ำ กำหนดประเภทใหม่ที่มีพฤติกรรมเฉพาะ และใช้ฟังก์ชันระดับแรก (first-class functions) รวมถึงฟังก์ชันที่ไม่มีชื่อ (anonymous functions) และคลอเจอร์ (closures) เพื่อสร้างโค้ดที่ยืดหยุ่นและแยกส่วนได้ บทเรียนสิ้นสุดด้วยโปรเจกต์ปลายทางที่ใช้การแปลงตารางอุณหภูมิ

ผลการเรียนรู้:

  • กำหนดและเรียกใช้ฟังก์ชันโดยใช้พารามิเตอร์ อาร์กิวเมนต์ และไวยากรณ์แบบตัวแปร (variadic syntax)
  • แยกแยะตัวระบุที่เปิดเผย (exported) และไม่เปิดเผย (unexported) ด้วยกฎการตั้งชื่อของภาษา Go
  • สร้างประเภทที่กำหนดเองและผูกพฤติกรรมไว้กับมันโดยใช้เมธอดและรีซีฟเวอร์ (receivers)

🔹 บทเรียนที่ 5: บรรจุสินค้าในห้องสัมภาระ

ภาพรวม: บทเรียนนี้กล่าวถึงโครงสร้างข้อมูลพื้นฐานในภาษา Go สำหรับจัดการข้อมูลจำนวนมาก มันเริ่มจากการจัดการอาร์เรย์ที่มีความยาวคงที่และพฤติกรรมการคัดลอกหน่วยความจำ แล้วเปลี่ยนไปยังสไลซ์ที่มีความยืดหยุ่นเพื่อเข้าถึงข้อมูล และสุดท้ายคือแมพ (maps) สำหรับการค้นหาค่าโดยใช้คีย์ได้อย่างมีประสิทธิภาพ หน่วยงานสิ้นสุดลงด้วยโปรเจกต์ปลายทาง "เกมของชีวิต" ที่แสดงให้เห็นวิธีใช้สไลซ์หลายมิติเพื่อจำลองระบบที่ซับซ้อน

ผลการเรียนรู้:

  • ประกาศ ตั้งค่า และวนลูปผ่านอาร์เรย์ที่มีความยาวคงที่และตารางหลายมิติ
  • จัดการสไลซ์โดยใช้ช่วงดัชนี และขยายขนาดได้โดยใช้ฟังก์ชัน append
  • จัดการประสิทธิภาพหน่วยความจำโดยแยกแยะระหว่างความยาว (length) และความจุ (capacity) และจัดสรรทรัพยากรล่วงหน้าด้วย make

🔹 บทเรียนที่ 6: จัดวางบ้านพักบนดาวอังคาร

ภาพรวม: บทเรียนนี้แนะนำแนวทางของภาษา Go ในการจัดระเบียบข้อมูลและพฤติกรรมที่ซับซ้อน นักเรียนจะได้เรียนรู้วิธีจัดกลุ่มประเภทข้อมูลที่ต่างกันเข้าด้วยกันเป็นโครงสร้าง (structs) ตั้งค่าเริ่มต้นด้วยคอมโพสิตลิเตอรัล (composite literals) และจัดการพฤติกรรมของมันผ่านเมธอดและฟังก์ชันสร้าง (constructor functions) บทเรียนยังสำรวจปรัชญาการออกแบบที่โดดเด่นของภาษา Go นั่นคือ ให้ความสำคัญกับการประกอบ (composition) มากกว่าการสืบทอด (inheritance) และใช้อินเทอร์เฟซที่แฝงอยู่ (implicit interfaces) เพื่อให้เกิดโพลีมอร์ฟิซึม (polymorphism)

ผลการเรียนรู้:

  • กำหนด ตั้งค่า และคัดลอกโครงสร้างเพื่อจัดการข้อมูลพิกัดของดาวอังคารและรถสำรวจ
  • เข้ารหัสโครงสร้างภาษา Go ให้อยู่ในรูปแบบ JSON โดยใช้แท็กโครงสร้าง (struct tags) เพื่อการแลกเปลี่ยนข้อมูลที่ปรับแต่งได้
  • ใช้เมธอด ฟังก์ชันสร้าง และการฝังโครงสร้าง (struct embedding) เพื่อสร้างโค้ดที่สามารถนำไปใช้ซ้ำและจัดระเบียบได้

🔹 บทเรียนที่ 7: ค้นหาทางผ่านถ้ำก็อฟเฟอร์

ภาพรวม: บทเรียนนี้สำรวจพลังและความปลอดภัยของการใช้การอ้างอิง (indirection) ในภาษา Go โดยเน้นว่าการใช้พอยเตอร์ช่วยให้สามารถเปลี่ยนแปลงข้อมูลได้อย่างมีประสิทธิภาพและจัดการหน่วยความจำได้ดี บทเรียนนี้ให้กรอบการทำงานที่แข็งแรงสำหรับการเขียนโปรแกรมเชิงป้องกัน โดยสอนนักเรียนให้จัดการค่า nil จัดการทรัพยากรด้วยคำสั่ง defer และใช้รูปแบบการจัดการข้อผิดพลาดที่เหมาะสม — ซึ่งสุดท้ายนำไปประยุกต์ใช้กับเครื่องตรวจสอบซูโดกุ

ผลการเรียนรู้:

  • ใช้เครื่องหมาย & และ * เพื่อจัดการที่อยู่หน่วยความจำ และดีเรเฟอเรนซ์ (dereference) ค่า
  • ใช้พารามิเตอร์และรีซีฟเวอร์ที่เป็นพอยเตอร์เพื่อให้สามารถเปลี่ยนแปลงข้อมูลภายในฟังก์ชันและเมธอดได้
  • จัดการค่า nil ในสไลซ์ แมพ และอินเทอร์เฟซโดยไม่ก่อให้เกิดข้อผิดพลาดที่เวลาทำงาน (runtime panic)

🔹 บทเรียนที่ 8: การสื่อสารระหว่างรถสำรวจหลายคัน

ภาพรวม: บทเรียนนี้แนะนำเครื่องมือหลักด้านการขนาน (concurrency) ของภาษา Go ได้แก่ โกรูติน (goroutines) และช่องสื่อสาร (channels) มันสำรวจวิธีการดำเนินงานที่แยกจากกัน วิธีสื่อสารอย่างปลอดภัยระหว่างกัน และการจัดการสถานะร่วมกันด้วยมิวทิกซ์ (Mutexes) เพื่อหลีกเลี่ยงภาวะแข่งขัน (race conditions) บทเรียนสิ้นสุดด้วยโปรเจกต์ปลายทางที่จำลองรถสำรวจบนดาวอังคารที่เคลื่อนที่ผ่านตารางและรายงานการค้นพบ

ผลการเรียนรู้:

  • รันและจัดการงานขนานโดยใช้คำสั่ง go
  • ใช้ช่องสื่อสารและคำสั่ง select เพื่อสื่อสารอย่างปลอดภัยระหว่างโกรูติน
  • สร้างสายการไหลของข้อมูล (data pipelines) และจัดการวงจรชีวิตของโกรูตินโดยปิดช่องสื่อสาร