성장, 그리고 노력

부족하더라도 어제보다 더 잘해지자. 노력은 절대 배신하지 않는다.

go

go lang 기본기 다지기2 - 함수와 클로저

제이콥(JACOB) 2021. 1. 31. 00:48

2021/01/28 - [go] - go lang 기본기 다지기1 - 패키지, 변수와 자료형, 포인터

 

go lang 기본기 다지기1 - 패키지, 변수와 자료형, 포인터

워크스페이스에 3개의 폴더를 생성했다. 소스코드를 저장하는 "src", 컴파일된 패키지를 저장하는 "pkg", go의 바이너리를 저장하는 "bin" 폴더이다. 패키지  패키지 이름은 모든 go 파일의 최상단에

code-masterjung.tistory.com

 

1편 글에 이어 단순 공부글이다.


https://golang.org/doc/codewalk/functions/

함수와 클로저

// 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