[Go] ν•¨μˆ˜ κ³ κΈ‰(κ°€λ³€ 인수, defer, λžŒλ‹€ν•¨μˆ˜, ν•¨μˆ˜νƒ€μž… λ³€μˆ˜)

2025. 9. 19. 00:43Β·ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Go

 

 

λ“€μ–΄κ°€λ©°

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
'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Go' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Go] 고루틴(Goroutine)
  • [Go] Gin ν”„λ ˆμž„μ›Œν¬
  • [Go] Mordern Go κΈ°λ³Έ2(ν•¨μˆ˜, μΈν„°νŽ˜μ΄μŠ€, λ©”μ„œλ“œ, μ—λŸ¬)
  • [Go] Modern Go κΈ°λ³Έ
μ„œμ•„λž‘πŸ˜ƒ
μ„œμ•„λž‘πŸ˜ƒ
Just Do ItπŸ’ͺ
  • μ„œμ•„λž‘πŸ˜ƒ
    G-Stack
    μ„œμ•„λž‘πŸ˜ƒ
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (144)
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (78)
        • C++ 기초 (28)
        • C++ μ‘μš© (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • 컴퓨터 ꡬ쑰 & 운영체제 (31)
      • μ•Œκ³ λ¦¬μ¦˜ (12)
      • λ°μ΄ν„°λ² μ΄μŠ€ (5)
      • λ„€νŠΈμ›Œν¬ (3)
      • λ””μžμΈνŒ¨ν„΄ (5)
      • μ„œλΉ„μŠ€ & 툴 (7)
      • νŠΈλ Œλ“œ&이슈 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • GμŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    컴퓨터
    파이썬
    μž¬κ·€
    μŠ€νƒ
    init
    fork
    STD
    νŒŒμΌμž…μΆœλ ₯
    λ°°μ—΄
    상속
    λ³€μˆ˜
    cpu
    νŒ¨ν‚€μ§€
    λ””μžμΈνŒ¨ν„΄
    ν•¨μˆ˜
    λ©”λͺ¨λ¦¬
    pointer
    쑰건문
    Thread
    μ•Œκ³ λ¦¬μ¦˜
    가상메λͺ¨λ¦¬
    λ°μ΄ν„°λ² μ΄μŠ€
    c++
    go
    RAM
    포인터
    component
    c
    ν•˜λ“œλ””μŠ€ν¬
    반볡문
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
[Go] ν•¨μˆ˜ κ³ κΈ‰(κ°€λ³€ 인수, defer, λžŒλ‹€ν•¨μˆ˜, ν•¨μˆ˜νƒ€μž… λ³€μˆ˜)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”