2. Function

2.1 매개변수

2.1.1 자료형 명시

: 함수는 매개 변수를 가진다. 하지만, C/C++과 Java와는 다르게, 자료형이 매개변수의 이름 뒤에 온다. Go에서는 이것이 코드를 왼쪽에서 오른쪽으로 읽을때 더 자연스럽다고 생각한듯 하다. 그와 동일하게 리턴 자료형 또한 함수명이 끝나면 뒤에 따라 온다.

package main

import "fmt"

func add(x int, y int) int { 
    return x + y
}

func main() { 
    fmt.Println( add(42, 13) )
}

: 또한, 같은 자료형이 두개 이상 사용될시에 x int, y intx, y int로 명시 할수 있다.

2.2 Return

2.2.1 Multiple results

: 하나의 함수로 여러개의 결과를 리턴 할수 있다. (개인적으로 졸라 혁명적인 부분이라고 생각함.)

package main

import "fmt"

func swap(x, y string) (string, string) { return y, x}

func main() { a, b := swap("hello", "world") fmt.Println(a, b)}

2.2.2 Named results

: 반환 값에 이름을 부여하면, 함수 내부에서 변수 처럼 사용할수 있고, 무엇을 반환할지 지정되지 않은 return에 묵시적으로 해당 값을 반환 할수 있습니다.

package main

import "fmt"

func split(sum int) (x, y int) {
 x = sum * 4 / 9
 y = sum - x
 return //무엇을 반환할지 정해지지 않음.
}

func main() {
 fmt.Println(split(17))
}

2.3. 함수 값 (Function values)

: 함수도 값이다.

package main

import (
    "fmt"
    "math"
)

func main() {
    hypot := func(x, y float64) float64 {
                 return math.Sqrt(x*x + y*y)
             } // JavaScript처럼 함수를 생성하여 변수에 refer한다.

    fmt.Println(hypot(3, 4)) //해당 함수를 println의 인자로 전달한다.
}

2.4. 함수 클로져 (Function closures)

: 코드에서 adder함수는 클로져를 반환한다. 각각의 클로져는 자신만의 sum변수를 가진다.

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

func main() { 
    pos, neg := adder(), adder() //adder function은 각각의 sum을 가지는 어떤 처리가 있는 함수를 return 한다.
    for i := 0; i < 10; i++ { 
        fmt.Println( pos(i), neg(-2*i), ) 
    }
}

results matching ""

    No results matching ""