go는 c 처럼 if (조건문)로 쓸수도 있고 if 조건문 으로 괄호 생략하고 쓸 수 도 있다
다만 { } 는 if와 동일한 라인
} else { 는 무조건 동일 라인으로 해주어야 한다.
파이썬이 싫은 이유가 golang에도 동일하게 존재하게 되다니 ㅠㅠ
package main
import "fmt"
func main() { fmt.Println("counting")
for i := 0; i < 10; i++ { if (i % 2 == 0) { defer fmt.Println(i) } else { fmt.Println(i) } }
fmt.Println("done") } |
defer는 연기된 함수 호출이 쌓였다가 실행되는데 stack 이라 선입후출이다.
그런데 수정해서 아래와 같은 결과를 얻었는데.. 어떤 scope까지 쌓이다가 실행 되는걸까?
counting 1 3 5 7 9 done 8 6 4 2 0 |
[링크 : https://go-tour-ko.appspot.com/flowcontrol/13]
[링크 : https://www.callicoder.com/golang-control-flow/]
+
흐음.. 함수 단위에서 써야지 메인문에서 쓰긴 애매한 기능이군.
c와는 달리 garbage collector가 들어있어서 malloc-free 쌍은 필요 없을듯 하지만
그런식의 초기화, 삭제가 필요한 구조가 한 함수에 존재한다면(1회성)
초기화 하면서 삭제 함수를 defer 해두면 좀 편해질 것 같다.
특정 함수가 현재 함수가 끝나기 직전 실행하는 기능이다. |
[링크 : https://deep-dive-dev.tistory.com/22]