Golang - 함수

1 분 소요

기본적인 함수

import "fmt"

func main() {
    sum := add(1, 2)
    fmt.Println(sum) // 3

    x, y := PlusMinus(4, 1)
    fmt.Println(x, y) // 5, 3

    z, _ := PlusMinus(4, 1)
}

func add(a, b int) int {
    return a + b
}

func PlusMinus(a, b int, msg string) (int, int) {
    fmt.Println(msg)
    return a + b, a - b
}
  • 함수의 매개변수의 타입은 같은 것끼린 생략하고 마지막에 붙일 수 있다.
  • 함수의 리턴값은 여러개로 받을 수 있다.
  • 함수의 첫글자가 소문자면 해당 파일 내부에서만 쓸 수 있고, 대문자면 다른 파일에서 패키지를 import하여 쓸 수 있다.
  • _를 사용하여 쓰이지 않을 변수를 표시할 수 있다.

포인터 함수

import "fmt"

func main() {
    num := 7

    multi_value(num)
    fmt.Println(num) // 7

    multi_reference(num)
    fmt.Println(num) // 70
}

func multi_value(num) {
    num *= 10
}

func multi_reference(num *int) {
    *num *= 10
}
  • 인자로 변수의 주소를 넘기면 함수에서 포인터로 접근하여 주소를 참조한 값을 변경시킨다.

가변 인자

import "fmt"

func main() {
    m, s := multiplySum(1, 2, 3, 4, 5)
    fmt.Println(m, s) // 120, 15

    x := []int{2, 3, 4} // slice 변수
    a, b := multiplySum(x...)
    fmt.Println(a, b) // 24, 9
}

func multiplySum(numList ...int) (int, int) {
    m := 1
    s := 0
    for _, num := range numList {
        m *= num
        s += num
    }
    return m, s
}
  • 매개 변수의 개수가 동적으로 변하는게 가능하다.
  • 인자에 배열이나 슬라이스 형태의 변수가 아닌 내부 원소들을 풀어서 넘기고 싶으면 변수...로 표현하면 된다. (typescript의 spread연산자와 동일)

함수 호출 시 동작

import "fmt"

func main() {
    sum := add(1, 2)
    fmt.Println(sum) // 3
}

func add(a, b int) int {
    return a + b
}
  1. add(1, 2) 함수를 호출한다.
  2. 인수인 1과 2이라는 값은 해당 함수의 매개변수인 a와 b에 각각 복사하여 할당된다.
  3. return 키워드를 만나면서 해당 키워드 우측의 어떠한 계산된 값은 add(1, 2) 함수를 호출한 위치를 대체한다.
  4. 동시에 더이상 a와 b라는 지역변수에 접근할 수 없게 된다.
  5. sum := add(1, 2)에서 sum이라는 변수에 대체된 값이 할당된다.

카테고리:

업데이트:

댓글남기기