
๋ค์ด๊ฐ๋ฉฐ
Modern Go ๊ธฐ๋ณธ ํธ์์ ํจ์๋ฅผ ๋ค๋ค์ง๋ง, ์ด๊ฑธ๋ก๋ ๋ถ์กฑํฉ๋๋ค. Go์์๋ ๋์ฑ ๊ฐ๋ ฅํ ํจ์ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๊ฐ๋ณ ์ธ์ ํจ์ (Variadic Function)
- ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ ์ ํ ์์ด ๋ฐ์ ์ ์์.
- ...ํ์ ํ์์ผ๋ก ์ ์.
- ๋ด๋ถ์ ์ผ๋ก๋ slice๋ก ์ฒ๋ฆฌ๋จ.
package main
import "fmt"
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func main() {
fmt.Println(sum(1, 2)) // 3
fmt.Println(sum(1, 2, 3, 4, 5)) // 15
}
2. defer ์ง์ฐ ์คํ
- ํจ์๊ฐ ๋ฆฌํด๋๊ธฐ ์ง์ ์ ์คํ๋จ.
- ๋ณดํต ๋ฆฌ์์ค ํด์ , ํ์ผ ๋ซ๊ธฐ, unlock ๋ฑ์ ์ฌ์ฉ.
- defer๋ ์คํ์ฒ๋ผ ๋์ → ๋์ค์ ๋ฑ๋ก๋ ๊ฒ์ด ๋จผ์ ์คํ๋จ (LIFO).
package main
import "fmt"
func main() {
defer fmt.Println("๋ง์ง๋ง ์คํ๋จ")
defer fmt.Println("์ด๊ฒ๋ ์ง์ฐ ์คํ๋จ")
fmt.Println("๋ฉ์ธ ํจ์ ์์")
}
์ถ๋ ฅ:
๋ฉ์ธ ํจ์ ์์
์ด๊ฒ๋ ์ง์ฐ ์คํ๋จ
๋ง์ง๋ง ์คํ๋จ
๋ณดํต ํจ์ ์๋ช ์ฃผ๊ธฐ ๋ด์์ ๋๋ด์ผ ํ๋ ์์ ์ defer๋ก ํ์ฉ. File close, Mutex ์ ๊ธ ํด์ ๋ฑ ์ฒ๋ผ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋ ๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋จ.
func writeLog(w io.Writer, message string) {
fmt.Fprintf(w, "[Log] %s\n", message)
}
func main() {
f, _ := os.Create("app.log")
defer f.Close()
writeLog(f, "File log") // ํ์ผ์ ์ถ๋ ฅ
writeLog(os.Stdout, "Console") // ์ฝ์์ ์ถ๋ ฅ
}
3. ํจ์ ํ์ ๋ณ์ (Function Type Variable)
- ํจ์๋ ๋ณ์์ ๋ด์ ์ ์๊ณ , ์ธ์/๋ฆฌํด์ผ๋ก ์ฃผ๊ณ ๋ฐ์ ์ ์์.
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func main() {
// ํจ์ ํ์
๋ณ์
var op func(int, int) int
op = add
fmt.Println(op(3, 4)) // 7
}
4. ํจ์ ๋ฆฌํฐ๋ด (Function Literal, ์ต๋ช ํจ์)
- ์ด๋ฆ์ด ์๋ ํจ์ ์ ์ ๋ฐฉ์.
- ๋ณดํต ํจ์ ๋ณ์์ ๋ฐ๋ก ๋์ ํ๊ฑฐ๋ ์ฆ์ ์คํ.
- ํด๋ก์ (closure)๋ ์ง์ → ์ธ๋ถ ๋ณ์ ์บก์ฒ ๊ฐ๋ฅ.
package main
import "fmt"
func main() {
// ๋ณ์์ ๋ด์์ ์ฌ์ฉ
mul := func(a, b int) int {
return a * b
}
fmt.Println(mul(3, 4)) // 12
// ์ฆ์ ์คํ ํจ์
result := func(msg string) string {
return "Hello " + msg
}("Go")
fmt.Println(result) // Hello Go
// ํด๋ก์ ์์
counter := 0
inc := func() int {
counter++
return counter
}
fmt.Println(inc()) // 1
fmt.Println(inc()) // 2
}'ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > Go' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Go] ๊ณ ๋ฃจํด(Goroutine) (0) | 2025.10.13 |
|---|---|
| [Go] Gin ํ๋ ์์ํฌ (1) | 2025.09.20 |
| [Go] Mordern Go ๊ธฐ๋ณธ2(ํจ์, ์ธํฐํ์ด์ค, ๋ฉ์๋, ์๋ฌ) (2) | 2025.05.21 |
| [Go] Modern Go ๊ธฐ๋ณธ (0) | 2025.05.21 |
| [Go] Golang ๊ธฐ๋ณธ ์๊ฐ(ํ์ , ๋ณ์, ํจ์, ๋ฌธ๋ฒ) (1) | 2023.04.16 |
๋๊ธ