2021/01/28 - [go] - go lang 기본기 다지기1 - 패키지, 변수와 자료형, 포인터
1편 글에 이어 단순 공부글이다.
함수와 클로저
// main 함수
func main() {
// logic ...
}
// 매개 변수가 있는 경우
func add(a int, b int) {
// logic
}
// 자료형이 같을 경우 한번에 가능
func add(a, b int) {
// logic
}
// 반환값의 타입 정의
func add(a, b int)int {
// logic
return a+b
}
// 다중 반환 지원
func plusMinus(a, b int)(int,int) {
// logic
return a+b, a-b
}
main 함수는 go프로그램에서 가장 먼저 실행되는 함수다.
named return
반환하는 값을 미리 함수의 헤더에 정의할 수 있다.
func plusMinus(a, b int)(plus,minus int) {
plus = a+b
minus = a-b
return
}
일급 함수
자바스크립트와 같이 GO에서도 함수는 일급 함수다. 함수를 변수에 바인드하고 값처럼 사용할 수 있다.
var plus = func(a, b int)int {
return a+b
}
var minus = func(a, b int)int {
return a-b
}
func execute(op func(int,int)int, a,b int)int{
return op(a,b)
}
excute(plus,8,12)
가변 함수
인자의 개수를 미리 지정하지 않은 가변 함수 또한 지원된다.
func adds(nums ...int)(sum int) {
for _, v := range nums {
sum += v
}
return
}
private과 public
함수를 다른 패키지에서 사용해야 되는 경우가 많이 있다. 다른 언어라면 private이나 public 같은 접근 제어자를 통해 캡슐화하기도 하고 공개해 놓기도 한다. 하지만 go에는 접근제어자가 없다. 하지만 접근 제어자 대신 다른 규칙이 하나 있다.
- public 함수는 대문자로 시작해야 한다(exported function).
- 소문자로 시작한 함수는 패키지 내에서만 접근할 수 있다(unexpected).
여기에 대한 적절한 예제는 가장 많이 사용되는 fmt 패키지에서 볼 수 있다.
package main
import (
"fmt"
)
func main() {
fmt.Println("Jacob")
}
클로저
함수는 함수 바깥에 정의돈 변수를 참조하는 함수 값인 클로저가 될 수 있다.
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
sumClosure := adder() // sum = 0
sumClosure(1) // sum = 1
sumClosure(2) // sum = 3
}
반응형
'go' 카테고리의 다른 글
go lang 기본기 다지기1 - 패키지, 변수와 자료형, 포인터 (0) | 2021.01.28 |
---|