
λ€μ΄κ°λ©°
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 |