나는보고 에서이 예제를 sqlite3
에GitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
수입 명세서 앞의 밑줄이 의미하는 것을 찾지 못하는 것 같습니다.
나는보고 에서이 예제를 sqlite3
에GitHub
:
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
수입 명세서 앞의 밑줄이 의미하는 것을 찾지 못하는 것 같습니다.
답변:
부작용을 위해서만 패키지를 가져 오기위한 것입니다.
에서 이동 사양 :
부작용 (초기화)만을 위해 패키지를 가져 오려면 빈 식별자를 명시 적 패키지 이름으로 사용하십시오.
import _ "lib / math"
go-sqlite3 의 경우 밑줄 가져 오기는 다른 함수를 가져 오지 않고 함수 sqlite3
에서 데이터베이스 드라이버로 드라이버를 등록하는 부작용에 사용됩니다 init()
.
sql.Register("sqlite3", &SQLiteDriver{})
이 방법으로 등록되면 sqlite3는 sql
예제와 같이 코드에서 표준 라이브러리의 인터페이스 와 함께 사용할 수 있습니다 .
db, err := sql.Open("sqlite3", "./foo.db")
다른 답변이 그것을 완전히 설명했지만 "Show me the Code"사람들에게 이것은 기본적으로 패키지 수준 변수를 만들고 init
해당 패키지 의 기능을 실행 한다는 것을 의미합니다.
그리고 (있는 경우) init
이 패키지가 가져온 패키지 레벨 변수 및 패키지의 기능 계층 .
실제로 호출되지 않고 패키지가 만들 수있는 유일한 부작용은 패키지 수준 변수 (공개 또는 개인)를 작성하고 init
함수 내부에있는 것 입니다.
참고 : 기능을 고르기 전에 기능을 실행하는 트릭이 있습니다 init
. 이를 위해 패키지 레벨 변수를 초기화하여 사용할 수 있습니다.
func theVeryFirstFunction() int {
log.Println("theVeryFirstFunction")
return 6
}
var (
Num = theVeryFirstFunction()
)
func init() { log.Println("init", Num) }
https://golang.org/doc/effective_go.html#blank
진행중인 작업이거나 부작용을 위해 가져 왔습니다. 이 경우 문서에 설명 된대로 부작용에 대한 것이라고 생각합니다.