[go] 수입 명세서 앞의 밑줄은 무엇을 의미합니까?

나는보고 에서이 예제를 sqlite3GitHub :

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

수입 명세서 앞의 밑줄이 의미하는 것을 찾지 못하는 것 같습니다.



답변

짧은 답변:

부작용을 위해서만 패키지를 가져 오기위한 것입니다.

에서 이동 사양 :

부작용 (초기화)만을 위해 패키지를 가져 오려면 빈 식별자를 명시 적 패키지 이름으로 사용하십시오.

import _ “lib / math”

sqlite3에서

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

진행중인 작업이거나 부작용을 위해 가져 왔습니다. 이 경우 문서에 설명 된대로 부작용에 대한 것이라고 생각합니다.


답변