Golang - 함수
기본적인 함수
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
}
add(1, 2)
함수를 호출한다.- 인수인 1과 2이라는 값은 해당 함수의 매개변수인 a와 b에 각각 복사하여 할당된다.
return
키워드를 만나면서 해당 키워드 우측의 어떠한 계산된 값은add(1, 2)
함수를 호출한 위치를 대체한다.- 동시에 더이상 a와 b라는 지역변수에 접근할 수 없게 된다.
sum := add(1, 2)
에서 sum이라는 변수에 대체된 값이 할당된다.
댓글남기기