더북(TheBook)

패키지 임포트 시 빈 식별자를 별칭으로 지정

패키지를 코드에서는 사용하지 않지만, 패키지에 정의된 초기화 부분(init() 함수)은 수행해야 할 때가 있다. 이때는 별칭을 빈 식별자(_)로 주면 된다.

import (
    "database/sql"
    _ "github.com/mattn/go-sqlite3"
)

database/sql 패키지는 데이터베이스 작업에 대한 추상 인터페이스만 제공하고 실제 사용할 때는 특정 데이터베이스에 맞는 드라이버 패키지를 불러와서 사용해야 한다. go-sqlite3 패키지의 초기화 함수(init() 함수)에는 sqlite3 드라이버를 등록하는 코드가 작성되어 있어서 sqlite3 데이터베이스를 사용하려면 go-sqlite3 패키지가 먼저 로드되어야 하지만, 실제 코드를 작성할 때는 사용되지 않는다(database/sql 패키지 내부에서만 사용된다). 그래서 별칭을 빈 식별자로 주어 임포트했다.

다음은 별칭을 빈 식별자로 주어 패키지를 임포트하는 또 다른 예다.

import (
    "image"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"
)

image 패키지도 database/sql 패키지와 마찬가지로 각 이미지 포맷에 대한 추상 인터페이스만 제공하고 실제 프로세싱 작업은 image/gif, image/jpeg, image/png 같은 특정 포맷에 해당하는 하위 패키지에서 담당한다. image/gif, image/jpeg, image/png 패키지는 초기화 처리만 하고 실제 코드에서는 사용되지 않으므로 별칭을 빈 식별자로 주었다.

별칭을 사용하면 패키지의 버전 관리가 쉬워진다. import mypkg "mypkg_v1"로 임포트하면 mypkg_v1 패키지를 mypkg 이름으로 사용할 수 있다. 나중에 mypkg_v1mypkg_v2로 변경되어도 import mypkg "mypkg_v2"로 임포트해주면 소스를 변경하지 않고도 모든 API가 mypkg_v2를 바라보게 할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.