Go Language #2 flow control - countingmars/countingmars.github.io GitHub Wiki

https://tour.golang.org/flowcontrol/1

For

Go ์–ธ์–ด๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๋ฐ˜๋ณต๋ฌธ์„ ๊ฐ€์ง„๋‹ค, for ๋ฃจํ”„. for ๊ตฌ๋ฌธ์€ ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” 3๊ฐœ์˜ ์š”์†Œ(init, condition expression, post)๋ฅผ ๊ฐ€์ง„๋‹ค.

sum := 0
for i := 0; i < 10; i++ {
    sum += i
}
fmt.Println(sum)

๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ init์™€ post๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

for ; i < 10 ; { 
    ...
}

๊ทธ๋Ÿฐ๋ฐ init์™€ post๊ฐ€ ์ƒ๋žต๋œ ๊ฒฝ์šฐ์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก (;)๋„ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

for i < 10 {
    ...
}

๋งˆ์น˜ C ์–ธ์–ด์˜ while ๊ตฌ๋ฌธ์ด ๋๋„ค?

Forever

๊ทธ๋Ÿฐ๋ฐ ์ €๊ธฐ์„œ condition expression๋„ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

for {
    ...
}

๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์•„์ฃผ ์‹ฌํ”Œํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€?

if

์†Œ๊ด„ํ˜ธ๋Š” ํ•„์š”์—†์ง€๋งŒ ์ค‘๊ด„ํ˜ธ๋ฅผ ํ•„์ˆ˜๋ผ๋Š” ๊ฑธ ์žŠ์ง€๋ง์ž.

if x < 0 {
    ...
}

๊ทธ๋Ÿฐ๋ฐ if ๊ตฌ๋ฌธ๋„ for ๊ตฌ๋ฌธ์ฒ˜๋Ÿผ init ์˜์—ญ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

if one := 1; one < 2 {
    ...
}

if์˜ init ๋ถ€๋ถ„์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” else ๊ตฌ๋ฌธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

if one := 1; one < 2 {
    fmt.Println(one)
} else {
    fmt.Println(one)
}
Switch

switch ๊ตฌ๋ฌธ์€ break ๊ตฌ๋ฌธ์ด ๋ถˆํ•„์š”ํ•˜๋‹ค. (๋ณดํ†ต ๋‹ค๋ฅธ ์–ธ์–ด๋Š” break ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.)

switch number {
case 1: fmt.Println(1)
case 2: fmt.Println(2)
}

case ๊ตฌ๋ฌธ์—์„œ ํ•จ์ˆ˜๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

case f(): 

switch ๊ตฌ๋ฌธ์—์„œ ์กฐ๊ฑด์„ ๋„ฃ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ switch true์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋”ฐ๋ผ์„œ case ๊ตฌ๋ฌธ์˜ ํ‘œํ˜„์‹์ด true์ธ ๊ฒƒ์ด ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค.

switch { // switch true์™€ ๋™์ผํ•จ
case number < 10:
case number < 11:
case number < 12:
}
Defer

defer ๊ตฌ๋ฌธ์€ ์‹คํ–‰์„ ๋’ค๋กœ ๋ฏธ๋ฃฌ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋œ ์ดํ›„์— defer๋กœ ์ง€์ •๋œ ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

func print() {
    defer fmt.Println("hi")
    fmt.Println("world")
}

์œ„ print ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” world hi ์ด๋‹ค.

Stacking defers

defer ํ˜ธ์ถœ์€ ์Šคํƒ์— ์Œ“์ด๊ฒŒ ๋˜๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๋ฉด ์ผ๊ด„ ์‹คํ–‰๋œ๋‹ค. ์Šคํƒ์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์— ์Œ“์ธ ๊ฒƒ์ด ๊ฐ€์žฅ ๋จผ์„œ ์‹คํ–‰๋œ๋‹ค.

func print() {
fmt.Println("counting")
	for i := 0; i < 10; i++ {
		defer fmt.Print(i)
	}
	fmt.Println("done")
}

์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋Š” done 9876543210 ์ด๋‹ค.