본문 바로가기

Golang5

Golang panic(패닉)과 recover(복구): Java에서의 try-catch 구문 panic 프로그램 실행 중에 에러가 발생(= 런타임 에러)하여 종료되는 상황을 패닉이라고 표현한다. Java에서의 Exception과 유사한 상황이다. 배열의 범위를 넘어서는 인덱스로 접근하는 상황이 대표적인 예시이다. 패닉이 발생하면 현재 함수를 즉시 멈추고 defer 함수들을 모두 실행한 후 즉시 리턴한다. func main() { fmt.Println(divide(1, 0)) } func divide(a, b int) int { return a / b } panic: runtime error: integer divide by zero 런타임 에러뿐만 아니라 panic 함수를 사용해서 직접 에러를 발생시킬 수도 있다. panic(Error_Message) func main() { panic("Err.. 2019. 9. 10.
Golang defer (지연 호출) 지연 호출은 특정 함수를 현재 함수가 끝나기 직전에 실행하는 기능이다. Java에서의 try, catch, finally 구문에서 finally와 유사한 동작을 한다. func hello() { fmt.Println("Hello") } func world() { fmt.Println("World") } func main() { defer world() // world 함수가 나중에 호출된다. hello() hello() } Hello Hello World 지연 호출할 함수는 여러 개를 선언해도 되며, 이때 실행되는 순서는 LIFO이다. 따라서 맨 나중에 호출한 함수가 먼저 실행된다. func hello() { fmt.Println("Hello") } func world() { fmt.Println("Wo.. 2019. 9. 7.
Golang Closure 클로저(Closure)는 함수 안에서 함수를 선언 및 정의할 수 있고, 바깥쪽 함수에 선언된 변수에도 접근할 수 있는 함수를 말한다. 내부에 있는 함수의 입장에서 보았을 때 바깥 함수가 변수와 자기 자신(함수)을 에워싸고(close over) 있다고 해서 Closure라고 한다. func main() { a, b := 5, 10 f := func(x int) int { // main 함수내에 함수 f 정의 return a\*x + b // a, b는 f 외부에서 정의된 변수 } fmt.Println(f(2)) // 20 } 언뜻 보기에는 필요 없어 보일 수 있겠지만, 같은 지역변수를 계속해서 사용하고 싶을 때 유용하다. 지역변수는 함수 실행이 끝나면 소멸된다. 하지만 클로저에서 선언한 지역변수는 함수를 .. 2019. 9. 6.
Golang first-class function (일급함수) Go에서 함수는 일급함수로서 Go의 기본 타입과 같게 취급되며, 따라서 다른 함수의 파라미터로 전달하거나 다른 함수의 리턴값으로도 사용될 수 있다. func main() { // 정의된 함수를 파라미터에 전달 sum := func(i int, j int) int { return i + j } fmt.Println(calc(sum, 5, 10)) // 15 // 파라미터에 익명함수를 직접 정의 fmt.Println(calc(func(a int, b int) int { return a \- b }, 5, 10)) // -5 } func calc(f func(int, int) int, a int, b int) int { return f(a, b) } first-class citizens 일급/이급 객체의 개념.. 2019. 9. 3.