Alert
์ด ๊ธ์ Claude Code์ ๋์์ ๋ฐ์ ์์ฑ๋์์ต๋๋ค
TL;DR
- Go์ ๋ฐ๋ณต๋ฌธ์
forํ๋๋ฟ์ด๋ฉฐwhile,do-whileํค์๋๊ฐ ์์range๊ฐ ๋๊ธฐ๋ ๊ฐ์ ๋ณต์ฌ๋ณธ์ด๋ผ ์๋ณธ ์์ ์ ์ธ๋ฑ์ค ์ ๊ทผ์ผ๋ก ํด์ผ ํจ- ์ค์ฒฉ ๋ฃจํ๋ ๋ ์ด๋ธ(
break outer)๋ก ํ ๋ฒ์ ๋น ์ ธ๋๊ฐ ์ ์์range๋ก ๋ฌธ์์ด ์ํ ์ ๋ฐ์ดํธ ์ธ๋ฑ์ค์ rune ๋จ์ ๊ฐ์ ๋ฐํํ๋ฏ๋ก Python์ ๋ฌธ์ ๋จ์ ์ํ์ ๋ค๋ฆif๋ฌธ์ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ๋ฃ์ ์ ์๊ณ , ๋ณ์ ์ค์ฝํ๊ฐ ๋ธ๋ก ๋จ์๋ก ์ ํ๋จ:=์๋์์ Go ์ด๋ณด์๊ฐ ๊ฐ์ฅ ๋ง์ด ๊ฒช๋ ๋ฒ๊ทธ ์์ธ ์ค ํ๋switch๋ ์๋ break์ด๋ฉฐfallthrough๋ก ๋ค์ case์ ์ด์ด ์คํ ๊ฐ๋ฅ
1. for ํ๋๋ก ์ ๋ถ โ Go์๋ while์ด ์๋ค
Python์๋ for, while, ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
๋ฑ ๋ฐ๋ณต ๊ตฌ๋ฌธ์ด ์ฌ๋ฟ ์์ง๋ง, Go๋ for ํค์๋ ํ๋๋ก ๋ชจ๋ ๋ฐ๋ณต์ ์ฒ๋ฆฌํ๋ค.
1-1. C-style for loop
for i := 0; i < 10; i++ {
fmt.Println(i)
}for i in range(10):
print(i)์ด๊ธฐํ(; ์), ์กฐ๊ฑด(; ์ฌ์ด), ํ์ฒ๋ฆฌ(; ๋ค) ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค. Python์ range()๊ฐ ์ด ์ธ ๊ฐ์ง๋ฅผ ํ๋ฒ์ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ๊ณผ ๋น๊ตํ๋ฉด ์ข ๋ ๋ช
์์ ์ด๋ค.
1-2. ์กฐ๊ฑด์๋ง (= while)
i := 1
for i < 100 {
i *= 2
}i = 1
while i < 100:
i *= 2์ด๊ธฐํ์ ํ์ฒ๋ฆฌ๋ฅผ ๋นผ๋ฉด while๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค.
1-3. ๋ฌดํ ๋ฃจํ
for {
// break ๋๋ return์ผ๋ก ํ์ถ
}while True:
# break ๋๋ return์ผ๋ก ํ์ถ์กฐ๊ฑด์๋ง์ ๋นผ๋ฉด ๋ฌดํ ๋ฃจํ๊ฐ ๋๋ค. while True:๋ณด๋ค ํ์ดํ์ด ์งง๋ค.
1-4. for-range (= for-in)
nums := []int{10, 20, 30}
for i, v := range nums {
fmt.Println(i, v)
}nums = [10, 20, 30]
for i, v in enumerate(nums):
print(i, v)range๋ ์ฌ๋ผ์ด์ค, ๋งต, ๋ฌธ์์ด, ์ฑ๋ ๋ฑ ๋ค์ํ ํ์
์ ์ฌ์ฉํ ์ ์๋ค.
๋งต ์ํ
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
fmt.Println(k, v)
}d = {"a": 1, "b": 2}
for k, v in d.items():
print(k, v)๋ถํ์ํ ๊ฐ ๋ฌด์
์ธ๋ฑ์ค๋ ๊ฐ์ด ํ์ ์์ผ๋ฉด _๋ก ๋ฌด์ํ ์ ์๋ค. ์ด ๊ด๋ก๋ Python๊ณผ ๋์ผํ๋ค.
for _, v := range nums {
fmt.Println(v)
}
for i := range nums {
fmt.Println(i) // ์ธ๋ฑ์ค๋ง ํ์ํ ๋๋ ๋ ๋ฒ์งธ ๋ณ์๋ฅผ ์์ ์๋ต
}for-range์ ๊ฐ์ ๋ณต์ฌ๋ณธ์ด๋ค
range๊ฐ ๋๊ฒจ์ฃผ๋ ๊ฐ์ ์๋ณธ ์์๊ฐ ์๋๋ผ ๋ณต์ฌ๋ณธ์ด๋ค. ๊ทธ๋์ ๋ฃจํ ๋ณ์๋ฅผ ์์ ํด๋ ์๋ณธ ์ฌ๋ผ์ด์ค๋ ๋ฐ๋์ง ์๋๋ค.
nums := []int{10, 20, 30}
for _, v := range nums {
v *= 2 // ๋ณต์ฌ๋ณธ๋ง ์์ ๋จ
}
fmt.Println(nums) // [10 20 30] โ ์๋ณธ ๊ทธ๋๋ก์๋ณธ์ ๋ฐ๊พธ๋ ค๋ฉด ์ธ๋ฑ์ค๋ก ์ง์ ์ ๊ทผํด์ผ ํ๋ค.
for i := range nums {
nums[i] *= 2 // ์๋ณธ ์์
}
fmt.Println(nums) // [20 40 60]๊ตฌ์กฐ์ฒด ์ฌ๋ผ์ด์ค์์ ํนํ ์ค์ํ๊ธฐ ์ฝ๋ค. ๋ณต์ฌ๋ณธ์ ํ๋๋ฅผ ๋ฐ๊ฟ๋ด์ผ ์๋ณธ์๋ ๋ฐ์๋์ง ์๋๋ค.
type Point struct{ X, Y int }
points := []Point{{1, 2}, {3, 4}}
for _, p := range points {
p.X = 100 // ๋ณต์ฌ๋ณธ์ ํ๋ โ ๋ฌด์๋ฏธ
}
fmt.Println(points) // [{1 2} {3 4}] โ ๋ณํ ์์
for i := range points {
points[i].X = 100 // ์๋ณธ ์์
}
fmt.Println(points) // [{100 2} {100 4}]Python๊ณผ์ ์ฐจ์ด
Python์์
for item in list๋ก ๋ฐ์item๋ ์ฌํ ๋น(item = ...)ํ๋ฉด ์๋ณธ์ด ์ ๋ฐ๋๋ ๊ฑด ๊ฐ๋ค. ํ์ง๋งitem์ด ๋ฆฌ์คํธ๋ ๊ฐ์ฒด๋ฉดitem.attr = ...์ด๋item.append(...)๋ก ๋ด๋ถ๋ฅผ ์์ ํ ์ ์๋ค. Go์ ๊ฐ ํ์ (๊ตฌ์กฐ์ฒด, ๋ฐฐ์ด)์ ๋ณต์ฌ๋ณธ์ด๋ผ ์ด๋ฐ ๋ด๋ถ ์์ ์กฐ์ฐจ ์๋ณธ์ ๋ฐ์๋์ง ์๋๋ค. ์ฌ๋ผ์ด์ค/๋งต ๊ฐ์ ์ฐธ์กฐ ํ์ ์ ๋ณต์ฌ๋ณธ์ด์ด๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฏ๋ก ์์ ์ด ๋ฐ์๋๋ค.
1-5. ๋ ์ด๋ธ๋ง โ ์ค์ฒฉ ๋ฃจํ ํ ๋ฒ์ ๋น ์ ธ๋๊ฐ๊ธฐ
break์ continue๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์์ชฝ ๋ฃจํ์๋ง ์ ์ฉ๋๋ค. ์ค์ฒฉ ๋ฃจํ์์ ๋ฐ๊นฅ ๋ฃจํ๊น์ง ์ ์ดํ๋ ค๋ฉด ๋ ์ด๋ธ์ ๋ถ์ธ๋ค.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j > 2 {
break outer // ๋ฐ๊นฅ ๋ฃจํ๊น์ง ํ ๋ฒ์ ํ์ถ
}
fmt.Println(i, j)
}
}continue๋ ๋ ์ด๋ธ๊ณผ ํจ๊ป ์ธ ์ ์๋ค. ์์ชฝ ๋ฃจํ๋ฅผ ์ค๋จํ๊ณ ๋ฐ๊นฅ ๋ฃจํ์ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋ค.
outer:
for _, row := range matrix {
for _, v := range row {
if v < 0 {
continue outer // ์์๋ฅผ ๋ง๋๋ฉด ์ด ํ์ ๋ฒ๋ฆฌ๊ณ ๋ค์ ํ์ผ๋ก
}
fmt.Println(v)
}
}Python์๋ ๋ ์ด๋ธ ๋ฌธ๋ฒ์ด ์๋ค. ๊ฐ์ ๋์์ ํ๋ ค๋ฉด ํ๋๊ทธ ๋ณ์๋ฅผ ๋๊ฑฐ๋ ํจ์๋ก ๋ถ๋ฆฌํด์ return์ผ๋ก ๋น ์ ธ๋์ค๋ ์์ผ๋ก ์ฐํํ๋ค.
# Python โ ํ๋๊ทธ๋ก ์ฐํ
done = False
for i in range(3):
for j in range(3):
if i * j > 2:
done = True
break
if done:
break๋ ์ด๋ธ ์์ฑ ๊ด๋ก
๋ ์ด๋ธ ์ด๋ฆ์ ๋ฃจํ ๋ฐ๋ก ์์ ์ฝ๋ก (
:)๊ณผ ํจ๊ป ์ฐ๊ณ , ๋ค์ฌ์ฐ๊ธฐํ์ง ์๋๋ค. ๊น์ ์ค์ฒฉ์ด ์์ฃผ ์๊ธฐ๋ฉด ๋ ์ด๋ธ๋ณด๋ค ํจ์๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋จผ์ ๊ณ ๋ คํ๋ ํธ์ด ๋ซ๋ค.
2. range์ ๋ฌธ์์ด โ ๋ฐ์ดํธ vs ๋ฃฌ
Python์์ ๋ฌธ์์ด์ ์ํํ๋ฉด ํญ์ ๋ฌธ์(์ ๋์ฝ๋ ์ฝ๋ํฌ์ธํธ) ๋จ์๋ก ์ฒ๋ฆฌ๋๋ค. Go๋ ๋ค๋ฅด๋ค.
Go์ ๋ฌธ์์ด์ ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํธ ์ฌ๋ผ์ด์ค([]byte)๋ค. range๋ก ๋ฌธ์์ด์ ์ํํ๋ฉด ์ธ๋ฑ์ค๋ ๋ฐ์ดํธ ์์น, ๊ฐ์ rune(์ ๋์ฝ๋ ์ฝ๋ํฌ์ธํธ) ์ผ๋ก ๋ฐํ๋๋ค.
s := "apple_ฯ!"
for i, r := range s {
fmt.Printf("i=%d r=%c\n", i, r)
}์ถ๋ ฅ ๊ฒฐ๊ณผ:
| i (๋ฐ์ดํธ ์ธ๋ฑ์ค) | r (rune) | ๋ฐ์ดํธ ์ |
|---|---|---|
| 0 | a | 1 |
| 1 | p | 1 |
| 2 | p | 1 |
| 3 | l | 1 |
| 4 | e | 1 |
| 5 | _ | 1 |
| 6 | ฯ | 2 |
| 8 | ! | 1 |
ฯ๋ UTF-8๋ก 2๋ฐ์ดํธ๋ฅผ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๊ฐ 6์์ 8๋ก ์ ํํ๋ค. ASCII ๋ฌธ์๋ง ๋ค๋ฃจ๋ค๊ฐ ๋ค๊ตญ์ด ๋ฌธ์์ด์ ๋ง๋๋ฉด ์ธ๋ฑ์ค ๊ณ์ฐ์ด ํ์ด์ง ์ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค.
Python๊ณผ์ ์ฐจ์ด
Python์์
enumerate("apple_ฯ!")๋ฅผ ํ๋ฉด ์ธ๋ฑ์ค๊ฐ 0, 1, 2, โฆ 8๊น์ง ์์๋๋ก ์ฆ๊ฐํ๋ค. Python์str์ ๋ด๋ถ์ ์ผ๋ก ์ ๋์ฝ๋ ์ฝ๋ํฌ์ธํธ ๋จ์๋ก ์ธ๋ฑ์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ์ดํธ ๋จ์๋ก ์ํํ๊ณ ์ถ๋ค๋ฉด range๋ฅผ ์ฐ์ง ๋ง๊ณ ์ธ๋ฑ์ค๋ก ์ง์ ์ ๊ทผํ๋ฉด ๋๋ค.
for i := 0; i < len(s); i++ {
fmt.Printf("byte[%d] = %x\n", i, s[i])
}3. if๋ฌธ โ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ด ์๋ if
Go์ if๋ ์กฐ๊ฑด์ ์์ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ๋ฃ์ ์ ์๋ค. ์ด ๋ณ์๋ if-else ๋ธ๋ก ์์์๋ง ์ ํจํ๋ค.
if n := rand.Intn(10); n == 0 {
fmt.Println("too low")
} else if n > 5 {
fmt.Println("too big:", n)
} else {
fmt.Println("good:", n)
}
// ์ฌ๊ธฐ์ n์ ์ฐ๋ฉด ์ปดํ์ผ ์๋ฌPython์๋ ์ด๋ฐ ๋ฌธ๋ฒ์ด ์๋ค. ๊ฐ์ฅ ๋น์ทํ ๊ฒ์ walrus operator(:=)์ง๋ง ์ค์ฝํ ๋์์ด ๋ค๋ฅด๋ค.
import random
# walrus operator โ n์ด ๋ฐ๊นฅ ์ค์ฝํ์์๋ ์ ํจํจ
if (n := random.randint(0, 9)) == 0:
print("too low")
elif n > 5:
print(f"too big: {n}")
else:
print(f"good: {n}")
print(n) # ์ฌ์ ํ ์ ๊ทผ ๊ฐ๋ฅํต์ฌ ์ฐจ์ด
- Go:
if์ด๊ธฐํ ๊ตฌ๋ฌธ์ ๋ณ์๋if-else๋ธ๋ก์ด ๋๋๋ฉด ์ฌ๋ผ์ง๋ค- Python: walrus operator๋ก ์ ์ธํ ๋ณ์๋ ๋ฐ๊นฅ ์ค์ฝํ์์๋ ์ด์์๋ค
์ด ํจํด์ ์๋ฌ ์ฒ๋ฆฌ์์ ํนํ ์์ฃผ ์ฐ์ธ๋ค.
if err := doSomething(); err != nil {
return err
}
// err์ ์ฌ๊ธฐ์ ์ ๊ทผ ๋ถ๊ฐ โ ์ค์ฝํ๊ฐ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋จ4. ๋ธ๋ก ์ค์ฝํ์ ์๋์
Go๋ ์ค๊ดํธ({}) ๋ธ๋ก ๋จ์๋ก ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋๋ค. Python์ ํจ์ ๋จ์ ์ค์ฝํ(LEGB ๊ท์น)์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅด๋ค.
4-1. ๊ธฐ๋ณธ ๋ธ๋ก ์ค์ฝํ
x := 10
if true {
x := 20 // ์๋ก์ด x โ ๋ฐ๊นฅ x๋ฅผ ๊ฐ๋ฆฐ๋ค(shadow)
fmt.Println(x) // 20
}
fmt.Println(x) // 10:=๋ ์ ๋ณ์๋ฅผ ์ ์ธํ๋ ์ฐ์ฐ์๋ค. ์์ชฝ ๋ธ๋ก์์ :=๋ฅผ ์ฐ๋ฉด ๋ฐ๊นฅ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์๋ ์์ ํ ๋ณ๊ฐ์ ๋ณ์๊ฐ ๋ง๋ค์ด์ง๋ค.
Python์์๋ ๊ฐ์ ์ด๋ฆ์ ํ ๋นํ๋ฉด ๋ฐ๊นฅ ๋ณ์๋ฅผ ๋ฎ์ด์ด๋ค.
x = 10
if True:
x = 20 # ๋ฐ๊นฅ x๋ฅผ ๋ฎ์ด์
print(x) # 20
print(x) # 204-2. err ์๋์ ํจ์
์ค๋ฌด์์ ๊ฐ์ฅ ์์ฃผ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ๋ค.
var err error
err = step1() // ๋ฐ๊นฅ err์ ํ ๋น
if err != nil {
return err
}
if true {
err := step2() // ์๋ก์ด err! ๋ฐ๊นฅ err์ ๊ฐ๋ฆผ
// ์ด err์ ๋ธ๋ก์ด ๋๋๋ฉด ์ฌ๋ผ์ง๋ค
_ = err
}
fmt.Println(err) // step1()์ ์๋ฌ๊ฐ โ step2() ๊ฒฐ๊ณผ๋ ๋ฐ์ ์ ๋จ๊ฐ์ ์ค์ฝํ์์ :=๋ฅผ ์ฐ๋ฉด ์ด๋ฏธ ์ ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฌ์ฉํ์ง๋ง, ์์ชฝ ๋ธ๋ก์์ :=๋ฅผ ์ฐ๋ฉด ์ ๋ณ์๊ฐ ๋๋ค. ์ด ์ฐจ์ด๋ฅผ ๋์น๋ฉด ์๋ฌ๋ฅผ ์ผํค๋ ๋ฒ๊ทธ๊ฐ ์๊ธด๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋ฐ๊นฅ ๋ณ์์ ํ ๋นํ๋ ค๋ฉด
=๋ฅผ ์ฌ์ฉํ๋ค (:=๋์ )go vet -shadow๋๋ shadow ๋ฆฐํฐ๋ก ์๋์์ ๊ฒ์ถํ ์ ์๋คgolangci-lint์ shadow ๊ด๋ จ ๋ฆฐํฐ๋ฅผ ํ์ฑํํ๋ฉด CI์์ ์๋์ผ๋ก ์ก์์ค๋ค
4-3. ์ ๋๋ฒ์ค ๋ธ๋ก ์๋ณ์ ์๋์
len, cap, make, append, new, true, false ๋ฑ์ Go์ ์ ๋๋ฒ์ค ๋ธ๋ก(์ต์์ ์ค์ฝํ)์ ์ ์๋ ์๋ณ์๋ค. ์ด๊ฒ๋ค๋ ์๋์์ด ๊ฐ๋ฅํ๋ค.
len := 10 // ์ปดํ์ผ ์๋ฌ ์ ๋จ! ํ์ง๋ง ์ดํ len() ํจ์๋ฅผ ์ธ ์ ์์์ด๋ฐ ์ด๋ฆ์ ๋ณ์๋ช
์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค. Python์์ list = [1, 2, 3]์ผ๋ก ๋นํธ์ธ์ ๋ฎ์ด์ฐ๋ ์ค์์ ๊ฐ์ ๋งฅ๋ฝ์ด๋ค.
5. switch โ Python match/case๋ณด๋ค ์ ์ฐํ๋ค
Go์ switch๋ C/C++๊ณผ ๋ฌ๋ฆฌ break๊ฐ ํ์ ์๋ค. ๋งค์นญ๋๋ case๋ฅผ ์คํํ๋ฉด ์๋์ผ๋ก ๋น ์ ธ๋์จ๋ค.
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("macOS")
case "linux":
fmt.Println("Linux")
default:
fmt.Println(os)
}import platform
match platform.system():
case "Darwin":
print("macOS")
case "Linux":
print("Linux")
case os:
print(os)Go switch๊ฐ ๋ ์ ์ฐํ ๋ถ๋ถ
ํ๋์ case์ ์ฌ๋ฌ ๊ฐ์ ์ฝค๋ง๋ก ๋์ดํ ์ ์๋ค.
switch day {
case "Sat", "Sun":
fmt.Println("weekend")
default:
fmt.Println("weekday")
}๋น๊ต ๋์ ์์ด switch๋ง ์ฐ๋ฉด if-else ์ฒด์ธ์ ๋์ฒดํ ์ ์๋ค.
switch {
case n < 0:
fmt.Println("negative")
case n == 0:
fmt.Println("zero")
default:
fmt.Println("positive")
}fallthrough โ ๋ค์ case๋ก ๋จ์ด๋จ๋ฆฌ๊ธฐ
Go๋ ๊ธฐ๋ณธ์ด ์๋ break๋ผ์, C์ฒ๋ผ ๋ค์ case๋ก ์ด์ด์ ์คํํ๋ ค๋ฉด fallthrough๋ฅผ ๋ช
์ํด์ผ ํ๋ค. ํ์ฌ case์ ์ฝ๋๋ฅผ ์คํํ ๋ค ๋ฐ๋ก ๋ค์ case์ ์ฝ๋๊น์ง ์กฐ๊ฑด ๊ฒ์ฌ ์์ด ์คํํ๋ค.
switch n := 2; n {
case 2:
fmt.Println("2")
fallthrough // ๋ค์ case๋ก ๋จ์ด์ง๋ค
case 1:
fmt.Println("1")
fallthrough
case 0:
fmt.Println("0")
}
// ์ถ๋ ฅ:
// 2
// 1
// 0fallthrough๋ ๋ค์ case์ ์กฐ๊ฑด์ ํ์ธํ์ง ์๊ณ ๋ฌด์กฐ๊ฑด ์คํํ๋ค. ์ด ์ ์ ๋์น๊ธฐ ์ฝ๋ค. ์์์ n์ด 2์ฌ๋ case 1, case 0์ ๋ณธ๋ฌธ์ด ๋ชจ๋ ์คํ๋๋ค.
๋์ ๋๋ ๋ฑ๊ธ ์ฒ๋ฆฌ ๊ฐ์ ๊ณณ์์ ๊ฐ๋ ์ฐ์ง๋ง, ์๋๋ฅผ ํท๊ฐ๋ฆฌ๊ฒ ๋ง๋ค๊ธฐ ์ฌ์์ ์ค๋ฌด์์๋ ๊ฑฐ์ ์ฐ์ง ์๋๋ค. ๋๋ถ๋ถ์ ์ฝค๋ง๋ก ์ฌ๋ฌ ๊ฐ์ ๋์ดํ๋ ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ๋ค.
# Python match/case์๋ fallthrough๊ฐ ์๋ค โ ์ฌ๋ฌ ๊ฐ์ | ๋ก ๋ฌถ๋๋ค
match command:
case "start" | "run":
print("์คํ")
case "stop":
print("์ค์ง")if๋ฌธ์ฒ๋ผ switch์๋ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ๋ฃ์ ์ ์๋ค. ์์ os := runtime.GOOS, n := 2 ๋ถ๋ถ์ด ๊ทธ ์์๋ค.