GoLang(go)에서 blank identifier ( _ 지시자, undersocre 대신 blank 라고 표현)는 코드 상에서 보통 필요하지 않지만 리턴 값을 받아야할 때 사용한다. 그런데 패키지 import 시 해당 패키지를 _ 로 aliasing 하는 경우가 있다.
다음은 대표적은 경우다.
// pprof 패키지를 _ 로 aliasing
import _ "net/http/pprof"
// sql 인터페이스 제공 패키지
import "database/sql"
// 실제 sql db 에 따른 driver 패키지 사용시 _ 로 aliasing
import _ "github.com/go-sql-driver/mysql"
위와 같은 경우 실제 코드에서 패키지를 명시(pprof. myslq. 등)하여 사용할 일이 없다.
이렇게 되면 필요없는 패키지를 import 했다고 go 가 컴파일 에러를 낸다.
하지만 _ 로 aliasing 하면 실제 코드에서는 명시하지 않았지만 해당 패키지가 로드되고 패키지 내부의 init() 등의 필요한 초기화 처리(side effect)가 진행된다.
실제 pprof 나 mysql 드라이버 패키지는 로드될 때 init 기능을 수행하여 런타임시 사용된다.
이렇게 실제 패키지 로드시 side effect 를 누리기 위해서 _ 를 사용하게 된다.
참고 https://golang.org/doc/effective_go.html#blank_import
comments:
댓글 쓰기