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 ์ด๋ค.