Control Flow
Control flow: ส่วนใหญ่คุ้นเคย มีหนึ่งเรื่องที่น่าแปลกใจ
หัวข้อที่มีชื่อว่า “Control flow: ส่วนใหญ่คุ้นเคย มีหนึ่งเรื่องที่น่าแปลกใจ”TypeScript มี if, for, for...of, for...in, while, do...while และ switch ส่วน Go มีแค่ if, for และ switch — โดย for ตัวเดียวทำหน้าที่ของ loop ทุกแบบ ไม่มี keyword while พอได้ลองใช้จริง คุณจะติดใจความเรียบง่ายแบบนี้
if / else
หัวข้อที่มีชื่อว่า “if / else”if ของ Go คล้ายกับของ TypeScript แต่ไม่มีวงเล็บล้อมรอบเงื่อนไข และต้องมีปีกกาเสมอ
if (score > 90) { console.log("A");} else if (score > 70) { console.log("B");} else { console.log("C");}if score > 90 { fmt.Println("A")} else if score > 70 { fmt.Println("B")} else { fmt.Println("C")}loop for หนึ่งเดียว
หัวข้อที่มีชื่อว่า “loop for หนึ่งเดียว”for ของ Go ครอบคลุมรูปแบบการวน loop ทุกแบบ:
// C-stylefor (let i = 0; i < 5; i++) { ... }
// whilewhile (condition) { ... }
// infinitewhile (true) { ... }
// for...offor (const item of items) { ... }// C-stylefor i := 0; i < 5; i++ { ... }
// while (drop init and post)for condition { ... }
// infinitefor { ... }
// range (like for...of)for i, item := range items { ... }switch ของ Go ไม่ fall through โดยอัตโนมัติ (ต่างจาก JavaScript/TypeScript ที่ต้องใส่ break) แต่ละ case เป็นอิสระต่อกัน ถ้าต้องการพฤติกรรมแบบเดิม ใส่ fallthrough เองได้
switch (day) { case "Mon": case "Tue": console.log("Weekday"); break; // required! case "Sat": case "Sun": console.log("Weekend"); break; default: console.log("Unknown");}switch day {case "Mon", "Tue", "Wed", "Thu", "Fri": fmt.Println("Weekday") // no break neededcase "Sat", "Sun": fmt.Println("Weekend")default: fmt.Println("Unknown")}range วนซ้ำผ่าน slices, maps, strings และ channels สำหรับ slice จะให้ทั้ง index และ value ใช้ _ เพื่อทิ้งค่าใดค่าหนึ่งได้
const nums = [10, 20, 30];
// index + valuenums.forEach((v, i) => console.log(i, v));
// value onlyfor (const v of nums) { console.log(v); }nums := []int{10, 20, 30}
// index + valuefor i, v := range nums { fmt.Println(i, v)}
// value only (discard index)for _, v := range nums { fmt.Println(v)}ลองเล่นดู
หัวข้อที่มีชื่อว่า “ลองเล่นดู”package main
import "fmt"
func classify(n int) string { switch { case n < 0: return "negative" case n == 0: return "zero" case n < 10: return "small" default: return "large" }}
func main() { nums := []int{-3, 0, 7, 42} for _, n := range nums { fmt.Printf("%d is %s\n", n, classify(n)) }}Loading Go runtime (first run only, ~8 MB)…