본문 바로가기
Go-공부하기

Go. - Function

by Thdnice 2022. 4. 23.
반응형

 

Go 에서 함수는 func 키워드를 통해 선언된다. 예를들어 두 인자를 더하는 plus 라는 함수를 만들고자 하면

 

 func plus( a int, b int)  int{
 	sum := a + b
 	return sum
 }

 

위와 같이 만들 수 있다. 여전히 어색하지만 변수형이 뒤에 가있다는 점과, 왈러스로 변수형없이 변수를 선언한것을 제외하면 다른 언어와 다를게 없다. 여기서 Go 만의 특색을 좀 추가하면 일단 retrun 시 2개의 값을 같이 리턴할 수 있다. 예를들어 두 인자를 서로 더하고 빼는 함수라면 아래와 같이 return 을 , 로 구분해서 동시에 리턴 할 수 있다.

func plus_minus( a int, b int ) (int, int) {
	
    plus_result := a + b
    minus_result := a - b
    
    return plus_result, minus_result 
    
}

 

또 리턴할 변수명을 미리 선언하고 단순히 return 을 호출하는 걸로 함수를 끝낼 수 도 있는데 

func plus_minus( a int, b int ) (plus_result int, minus_result int) {
	
    plus_result = a + b  // 여기서는 := 를 사용하면 안됨! (위에서 먼저 선언했으므로)
    minus_result = a - b  // := 는 new! = 는 update 라고 생각하면 편함
    
    return 
    
}

이 같은 방법은 코드를 좀 정돈되게 보여주는 효과는 있지만, 아무래도 C 언어나 다른 언어를 먼저 접한 사람들에게는 어색할 것 같다.

 

그리고 함수가 retrun 된 뒤에 실행을 뜻하는 defer 이라는 키워드도 알아두면 요긴하다! (함수가 리턴 된 뒤인지, 아니면 리턴 바로 직전인지는 좀 애매한듯.. 아래의 코드를 보면

package main

import "fmt"

func plus_minus(a int, b int) (p_re int, m_re int){
	p_re = a+b
	m_re = a-b
	defer fmt.Println("calculate done.")
	return 
}


func main(){
	result1, result2 := plus_minus(10, 3)
	fmt.Println(result1, result2)
}

 

13, 7 의 출력 직전에 calculated done .이라는 출력이 뜨는걸 확인할 수 있다. 즉 defer 가 포함되어 있는 함수가 끝난 후에 defer 행이 출력됨을 알 수 있다.

 

또한 한 함수에서 여러 defer 를 사용할 수 도 있는데, 이 경우 defer의 호출은 역순으로 시작된다. 아래의 코드를 보면

package main

import "fmt"


func cleanup(name string){
	fmt.Printf("Clean up %s\n", name)
}

func worker() {

	defer cleanup("A")
	defer cleanup("B")
	defer cleanup("C")


	fmt.Println("worker")

}

func main() {
	worker()
}

 

출력 결과는 다음과 같다.

worker
Clean up C
Clean up B
Clean up A

반응형

'Go-공부하기' 카테고리의 다른 글

Go. - Functions 2  (0) 2022.04.25
Go. - variables  (0) 2022.04.17
Go. Tutorial 2 - Echo Program 2  (0) 2020.12.22
Go. Tutorial 1 - Echo Program  (0) 2020.12.16