Go起步走 - if...else, switch


if..else

Go的if...else語法與其他語言非常相近。

// 如果if後方的敘述是true,就執行block中的內容
if a == 2 {
  return 2
}

// 加上else
if a == 2 {
  return 2
} else {
  return nil
}

// 加上else if 
if a == 2 {
  return 2
} else if a == 3 {
  return 3
} else {
  return nil
}

而Go比較特別的是可以在if後方加上一個initialization敘述。

if a += 1; a == 3 { 
  return 3
}
  1. a+=1會在condition判斷之前先執行,接著才進行判斷
  2. 如果以這種方式宣告,a變數的scope只存在於這個if..else的block當中
  3. 作用較像將整理code使用

switch

switch用法是給予多重敘述,看最初的值符合哪個,就執行哪個結果。

switch a {
  case 2: 
    return 2
  case 3:
    return 3
  default:
    return nil
}
// 記得冒號與括號的位置

當然,除此之外也有其他寫法:

// 不加初始變數,直接使用各個case當做判斷式
switch {
  case a == 2:
    return 2
  case b == 2:
    return 2
  default:
    return "both a, b are not 2"
}

// 簡易的case可以都用一行來撰寫
switch {
  case a == 2: return 2
  case b == 2: return 2
  default: return nil
}

// 符合多種情況可用逗號(,)分割
switch a {
  case 1,2:
    return 1 + 2
  case 3,4:
    return 3 + 4
}

// 可用break來停止整個switch的繼續執行
switch a {
  default:
    fmt.Println("Hello")
    break
    fmt.Println("World")
}
// => "Hello"
// 由於break的關係,印出"World"的指令並不會執行


// 用fallthrough來執行符合case下方的code
var result string
var a, b = 2, 3
switch {
  case a == 2:
    result = "a" 
    fallthrough
  case b == 2:
    result = "b"
  default:
    result = "no match"
}
// 結果result變數會是"b",因為雖然b的判斷式不成立
// 但由於a判斷式有fallthrough,所有一併連b的判斷式一起執行