반응형
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 |