[Go] finalizer
Updated:
개요
- 일반적으로 finalizer 함수는 해당 오브젝트가 가비지 컬렉션되기 전에 실행
- 하지만 실행이 보장되지 않으므로 오브젝트의 소멸자로 사용하는 것은 의도하지 않은 동작을 초래
- finalizer에서 리소스가 해제된다면 버그라고 볼 수 있음
- 리소스 릭을 최소화하거나 버그를 발견하고자 할 때 사용
예제
- 코드
-
package main import ( "runtime" ) type Test struct { i int } func main() { finalizer := func(test *Test) { println("~~~ ", test.i) } for i := 0; i < 10; i++ { test := Test{i: i} runtime.SetFinalizer(&test, finalizer) } runtime.GC() }
-
- 실행 결과
-
~~~ 7 ~~~ 6 ~~~ 5 ~~~ 4 ~~~ 3
-