โ ํ์
go์ธ์ด๋ ์ธ์ด์ฐจ์์ ํค์๋๊ฐ 25๊ฐ๋ฐ์ ์๋ค. ๋ค๋ฅธ ์ธ์ด์ ๋น๊ตํ๋ฉด ํ์คํ ์ ์ ๊ฒ์ ์ ์์๋ค.
์๋ฃํ์ ์ ์(int, uint), ์ค์(float), ๋ฌธ์/๋ฌธ์์ด(string), ๋ถ๋ฆฌ์ธ(bool), ๋ฐ์ดํธ(byte), rune(int32์ ๊ฐ์), complex(64, 32)๊ฐ ์๋ค.
โ ๋ณ์
๋ณ์ ์ ์ธ์ ๋ค์๊ณผ ๊ฐ๋ค.
var x int = 10
var arr [5]int // ๋ฐฐ์ด
var p *int // ํฌ์ธํฐ
const C int = 10 // ์์ ์ ์ธ
๋ณ์ x๋ intํ์ด๋ค ๋ผ๊ณ ์๊ฐํ์.
๐งจ ์๋ฃํ ์ถ๋ก
var i = 10
var p = &i
i := 10
p := &i
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฃ๋ฅผ ์ถ๋ก ํ๋ค. var๋ผ๋ ํค์๋ ์ญ์ :=์ผ๋ก ๋์ฒดํ ์ ์๋ค.
๐งจ ๋ณ์์ ํฌ๊ธฐ
C ์ธ์ด์ sizeof ์ฐ์ฐ์์ฒ๋ผ ๋ณ์์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ค๋ฉด unsafe ํจํค์ง์ Sizeof ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์ ํฌ๊ธฐ๋ ๋ฐ์ดํธ ๋จ์.
package main
import "fmt"
import "unsafe" // Sizeof ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ unsafe ํจํค์ง ์ฌ์ฉ
func main() {
var num1 int8 = 1
var num2 int16 = 1
var num3 int32 = 1
var num4 int64 = 1
fmt.Println(unsafe.Sizeof(num1)) // 1
fmt.Println(unsafe.Sizeof(num2)) // 2
fmt.Println(unsafe.Sizeof(num3)) // 4
fmt.Println(unsafe.Sizeof(num4)) // 8
}
โ ํจ์์ ๋ฐ๋ณต๋ฌธ
func(int, int)
func(int) int
func(int, func(int, int)) func(int) int
3๋ฒ์งธ ํจ์ ์ค๋ช
: ์ ์ ๊ทธ๋ฆฌ๊ณ ๋ ์ ์๋ฅผ ๋ฐ์๋ค์ด๋ ํจ์๋ฅผ ๋ฐ๊ณ , ์ ์ ํ๋๋ฅผ ๋ฐ๊ณ ์ ์ํ๋๋ฅผ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ฆฌํดํ๋ค.
ํฉํ ๋ฆฌ์ผ์ ๊ตฌํํ๋ ํจ์๋ฅผ ๋ณด์.
// Package main implements factorial.
package main
import "fmt"
// fac returns n!.
func fac(n int) int {
if n <= 0 {
return 1
}
return n * fac(n-1)
}
// facItr returns n!.
func facItr(n int) int {
result := 1
for n > 0 {
result *= n
n--
}
return result
}
func main() {
fmt.Println(fac(5))
fmt.Println(facItr(5))
}
fac์ ์ฌ๊ท๋ฅผ ํตํ ๊ตฌํ์ด๊ณ , facItr๋ ๋ฐ๋ณต๋ฌธ์ ํตํ ๊ตฌํ์ด๋ค. go์์์ ๋ฐ๋ณต๋ฌธ์ for๋ฐ์ ์๊ณ while์ ์กด์ฌ ํ์ง ์๊ธฐ ๋๋ฌธ์ while๋ฌธ๊ณผ ๋น์ทํ ํํ๋ก ๊ตฌํํ๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ for๋ฌธ์ผ๋ก ์์ฑํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
func facItr2(n int) int {
result := 1
for i := 1; i <= n; i++ {
result *= i
}
return result
}
๋ค์์ range for๋ฌธ์ด๋ค.
names := []string{"ํ๊ธธ๋", "์ด์์ ", "๊ฐ๊ฐ์ฐฌ"}
for index, name := range names {
println(index, name)
}
for range๋ฌธ์ for ์ธ๋ฑ์ค, ์์๊ฐ := range ์ปฌ๋ ์
ํํ๋ก ๊ตฌ์ฑ๋๋ค. ์ปฌ๋ ์
์์ ํ๋์ฉ ์์๋ฅผ ๋ฆฌํดํด์ ๊ทธ ์์์ ์์น์ธ๋ฑ์ค์ ๊ฐ์ index, name 2๊ฐ์ ๋ณ์์ ๊ฐ๊ฐ ํ ๋นํ๋ค.
๋ฐ๋ณต๋ฌธ์ ์ ๋ฆฌํ๋ฉด ์ผ๋ฐ for๋ฌธ, ์กฐ๊ฑด์ for๋ฌธ(while), range for๋ฌธ 3๊ฐ์ง๋ค.
โ switch ์ด๊ธฐ๋ฌธ
package main
import "fmt"
func getMyAge() int {
return 22
}
func main() {
switch age := getMyAge(); age { // getMyAge() ๊ฒฐ๊ณผ๊ฐ ๋น๊ต โถ
case 10:
fmt.Println("Teenage")
case 33:
fmt.Println("Pair 3")
default:
fmt.Println("My age is", age) // age๊ฐ ์ฌ์ฉ
}
fmt.Println("age is", age) // error - age ๋ณ์๋ ์ฌ๋ผ์ก์ต๋๋ค. โท
}
switch๋ฌธ์์ age๋ผ๋ ๋ณ์๋ฅผ ์ ์ธ ๋ฐ ์ด๊ธฐํํ๊ณ switch๋ฌธ์ ๋น๊ต๊ฐ์ผ๋ก age๊ฐ ์ฌ์ฉ๋๋ค.
package main
import "fmt"
func getMyAge() int {
return 22
}
func main() {
// age ๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
switch age := getMyAge(); true { // โถ
case age < 10:
fmt.Println("Child")
case age < 20:
fmt.Println("Teenager")
case age < 30:
fmt.Println("20s")
default:
fmt.Println("My age is", age) // age๊ฐ ์ฌ์ฉ
}
}
age ๋ณ์๋ฅผ ์ด๊ธฐ๋ฌธ์ ํตํด์ ์ ์ธ ๋ฐ ๋์
ํ๊ณ switch์ ๋น๊ต๊ฐ์ผ๋ก true๋ฅผ ์ฌ์ฉํด์ case ์กฐ๊ฑด๋ฌธ์ด true๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค. ์ฌ๊ธฐ์ ๋น๊ต๊ฐ์ด true์ผ ๊ฒฝ์ฐ ์๋ต ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ switch age := getMyAge(); { ๋ก ์ธ ์ ์๋ค.
โ switch: fallthrough ์ฌ์ฉํ๊ธฐ
ํน์ case์ ๋ฌธ์ฅ์ ์คํํ ๋ค ๋ค์ case์ ๋ฌธ์ฅ์ ์คํํ๊ณ ์ถ์ ๋๋ fallthrough ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. ๋ง์น C, C++์ switch ๋ถ๊ธฐ๋ฌธ์์ break ํค์๋๋ฅผ ์๋ตํ ๊ฒ์ฒ๋ผ ๋์ํ๋ค. ๋จ, ๋งจ ๋ง์ง๋ง case์๋ fallthrough ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
i := 3
switch i { // ๊ฐ์ ํ๋จํ ๋ณ์ ์ค์ c
ase 4: // ๊ฐ ์กฐ๊ฑด์ ์ผ์นํ๋
fmt.Println("4 ์ด์") // ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
fallthrough
case 3: // 3๊ณผ ๋ณ์์ ๊ฐ์ด ์ผ์นํ๋ฏ๋ก
fmt.Println("3 ์ด์") // ์ด ๋ถ๋ถ์ ์คํ
fallthrough // fallthrough๋ฅผ ์ฌ์ฉํ์ผ๋ฏ๋ก ์๋ case๋ฅผ ๋ชจ๋ ์คํ
case 2:
fmt.Println("2 ์ด์") // ์คํ
fallthrough
ase 1:
fmt.Println("1 ์ด์") // ์คํ
fallthrough
case 0:
fmt.Println("0 ์ด์") // ์คํ, ๋ง์ง๋ง case์๋ fallthrough๋ฅผ ์ฌ์ฉํ ์ ์์
}
์คํ ๊ฒฐ๊ณผ
3 ์ด์
2 ์ด์
1 ์ด์
0 ์ด์
3์ case 3:์์ “3 ์ด์”์ ์ถ๋ ฅํ๊ณ fallthrough ํค์๋๋ก ๋ค์ case์ ๋ฌธ์ฅ์ ๊ณ์ ์คํํ์ฌ “2 ์ด์”, “1 ์ด์”, “0 ์ด์”์ด ์ถ๋ ฅ๋ฉ๋๋ค.
โ switch: ์ฌ๋ฌ ์กฐ๊ฑด์ ํจ๊ป ์ฒ๋ฆฌํ๊ธฐ
์ฌ๋ฌ ์กฐ๊ฑด์ ๊ฐ์ ๋ฌธ์ฅ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋๋ case์์ , (์ฝค๋ง)๋ก ๊ฐ์ ๊ตฌ๋ถํด์ค๋๋ค.
-
case ๊ฐ1, ๊ฐ2, ๊ฐ3:
i := 3
switch i {
case 2, 4, 6: // i๊ฐ 2, 4, 6์ผ ๋
fmt.Println("์ง์")
case 1, 3, 5: // i๊ฐ 1, 3, 5์ผ ๋
fmt.Println("ํ์")
}
์คํ ๊ฒฐ๊ณผ
ํ์
๋๊ธ