Skip to content

함수 - Part3

1. 익명 함수, Function Expression

package main

import "fmt"

func main() {
    foo()
    func() {
        fmt.Println("anonymoust func 1")
    }()

    var fm2 = func() {
        fmt.Println("anonymoust func 2")
    } // Function Expression

    fm2()
    fmt.Printf("type of fm2 : %T\n", fm2) // "type of fm2 : func()"
}

func foo() {
    fmt.Println("foo")
}

Go 에서 Function 은 First-Class-Citizen 이다.

Note

  • 변수에 담을 수 있다. - Functional Expression
  • 함수의 리턴값이 될 수 있다. - Return Function
  • 함수의 인자가 될 수 있다. - Function Callback
package main

import "fmt"

func main() {
    s1 := foo()
    fmt.Println(s1) // "Hello world"

    fe := foo
    fmt.Println(fe()) // "Hello world"
}

func foo() string {
    s := "Hello world"
    return s
}

2. 함수를 리턴하기

package main

import "fmt"

func main() {
    s1 := foo()
    fmt.Println(s1()) // "100"
}

func foo() func() int {

    return func() int {
        return 100
    }
}

Go를 학습할 수록 너무 심각하게 유연해서 이걸 어떻게 체계적으로 잘 활용해야 되는건지 궁금하다.

3. Callback

import "fmt"

func main() {
    var add = func(a int, b int) int {
        return a + b
    }
    var added = reduce(0, add, 1, 2, 3, 4)
    fmt.Println(added) // "10"

    var mul = func(a int, b int) int {
        return a * b
    }
    var multiplied = reduce(1, mul, 1, 2, 3, 4)
    fmt.Println(multiplied) // "24"
}

func reduce(init int, f func(a, b int) int, vi ...int) int {
    var result = init
    for _, v := range vi {
        result = f(result, v)
    }
    return result
}

Last update: May 29, 2023
Created: May 29, 2023