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이라는 변수에 대체된 값이 할당된다.

카테고리:

업데이트:

댓글남기기