📝

【Go】41歳未経験エンジニア ~Go挑戦記#2~

2022/11/23に公開

基本編 その2 [制御構文]

for文

Goのfor文には大きく分けて3つの記述方法があります。

  1. for 【ステートメント】;【条件式】;【後処理】{ …処理内容… }
  2. for 【条件式】{ …処理内容… 【後処理】}
  3. for { …処理内容… 【break】}

条件式が「false」となった場合、もしくはfor文内の「break」を実行された場合にループを抜けます。
Goにはwhile文が無いので➁などを使いforで代用します。

➀ for文
sum := 0
for i := 0; i <= 3; i++ {
	sum += i // 「0 + 1 + 1 + 1」 の和が返される  
}
➁ for文
sum := 0
for sum <= 3 {
	sum += 1// 「0 + 1 + 1 + 1」 の和が返される  
}
➂ for文
sum := 0
for {
	sum += 1 // 「0 + 1 + 1 + 1」 の和が返される
	if sum >= 3 { break }
}

if文

if文は2種類の記述方法があります。

  1. if 【条件式】{ …処理内容… }
  2. if 【ステーメント】; 【条件式】{ …処理内容… }
➀ if文
num := 5
if num <= 10 {
	fmt.Println("numは10以下です。")
}
➁ if文
if num := 5; num <= 10 {
        fmt.Println("numは10以下です。")
}

また「else」, 「else if」もあります。

if文 else, else if
if num <= 10 {
        fmt.Println("numは10以下です。")
} else if num > 10 {
        fmt.Println("numは10より大きい値です。")
} else {
        fmt.Println("その他")
}

switch文

switch文も3種類になります。

  1. switch 【ステーメント】;【比較対象】{
    case 【比較値】:
    … 処理内容 … }
  2. switch 【比較対象】{
    case 【比較値】:
    … 処理内容 … }
  3. switch {
    case 【条件式】:
    … 処理内容 … }
➀ switch文
switch today := time.Now().Weekday(); today {
	case 0:
		fmt.Println("Sunday")
	case 1:
		fmt.Println("Monday")
	default:
		fmt.Printf("%s.\n", today)
}
➁ switch文
today := time.Now().Weekday()
switch today {
	case 0:
		fmt.Println("Sunday")
	case 1:
		fmt.Println("Monday")
	default:
		fmt.Printf("%s.\n", today)
}
➂ switch文
today := time.Now().Weekday()
switch {
	case today == 0:
		fmt.Println("Sunday")
	case today == 1:
		fmt.Println("Monday")
	default:
		fmt.Printf("%s.\n", today)
}

defer文

deferは関数の最初に付けることで呼び出す順番を遅延することができます。deferが付与された関数は、呼び出し元の関数が終わる(returnされる)まで実行されません。

defer文
fmt.Println("結果")
fmt.Println("1")
defer fmt.Println("2")
fmt.Println("3")
/*
結果
1
3
2
*/
}

結構、取りつきやすい部分と取りつき難い部分が分かれる印象を受けました。個人的には、条件式などの場合に「()」で囲わないのが何か抜けてるような気がして中々慣れないですが、これも慣れですね。

Discussion