Golang 함수와 익명함수 - Go series(5)
Categories: Golang
함수
func 키워드를 사용하여 정의한다. 파라미터는 변수 타입 순으로 적게되며 리턴타입은 파라미터 괄호 뒤에 적는다. 호출되는 함수가 호출하는 함수의 반드시 앞에 위치해야 할 필요는 없다.
Go에서 파라미터를 전달하는 방식은 Pass by value
와 Pass By Reference
로 나뉜다.
-
pass by value
- 파라미터의 값이 함수 내에서 변경되더라도 호출함수에서의 변수와 변함이 없다.
-
Pass by Reference - C언어의 포인터 사용법과 비슷하게 사용한다.
- 예시는 다음과 같다.
package main func main(){ msg:= "Hello!" say(&msg) println(msg) } func say(msg *string){ println(msg) *msg = "Change HellO!" }
처음 Hello가 say func에서 호출이되고, *msg=로 인해 Change가 된 string이 main println에서 출력된다!
-
Variadic Function(가변인자함수)
- 고정된 수의 파라미터가 아닌 다양한 숫자로 전달할 때 가변파라미터를 사용한다.
- 예시
package main func main(){ say("This","is","a","book") say("Hi") } func say(msg ...string){ for _, s := range msg{ println(s) } }
-
함수 리턴값 리턴값이 없을수도, 하나일수도, 복수 개일수도 있다.
- 리턴값 하나의 경우
func main(){ oneplustwo := sum(1,2) println(oneplustwo) } func sum(num ...int) int{ sum_value := 0 for _, n := range num{ sum_value += n } return sum_value }
- 리턴값 복수인 경우
func main(){ num_count, oneplustwo := sum(1,2) println(oneplustwo) } func sum(num ...int) (int, int){ sum_value := 0 num_count := 0 for _, n := range num{ sum_value += n num_count++ } return num_count, sum_value }
- Named Return Parameter
- 리턴값이 여러개일 때 코드 가독성을 높인다.
func sum2(num ...int) (count int, sum int) { for _, n := range num { sum += n count++ } return count, sum }
- 리턴값이 여러개일 때 코드 가독성을 높인다.
- 리턴값 하나의 경우
익명함수
함수명을 갖지 않는 함수이다. 일반적으로 그 함수 전체를 변수에 할당하거나 혹은 다른 함수의 파라미터에 정의디어 사용된다. 익명함수가 변수에 할당되면 변수명이 함수명으로 취급되어 변수명(파라미터)로 사용될 수 있다.
func main() {
sum := func(n ...int) (sum_value int) {
for _, num := range n {
sum_value += num
}
return sum_value
}
sum_result := sum(1, 2, 3, 4, 5)
println(sum_result)
}
-
일급함수
- Go에서 함수는 일급함수로서 기본 타입과 동일하게 취급됨. 다른 함수의 파라미터로 전달하거나 다른 함수의 리턴값으로도 사용될 수 있다. 즉 함수의 입력 파라미터나 리턴 파라미터로서 함수 자체가 사용될 수 있다!
package main func main() { add : func(i int, j int) int{ return i+j } r1 := calc(add,10,20) println(r1) r2 := add(10,20) println(r2) } func calc(f func(int, int) int, a int, b int) int { result := f(a,b) return result }
-
type을 사용한 원형 정의
- type문은 구조체, 인터페이스 등 user defined type을 정의하기 위해 사용된다.
type calcul func(int, int) int func calc(f calcul, a int, b int) int{ result := a+b return result }
- type문은 구조체, 인터페이스 등 user defined type을 정의하기 위해 사용된다.
Leave a comment