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


답변:


218

짧은 답변:

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

에서 이동 사양 :

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

import _ "lib / math"

sqlite3에서

go-sqlite3 의 경우 밑줄 가져 오기는 다른 함수를 가져 오지 않고 함수 sqlite3에서 데이터베이스 드라이버로 드라이버를 등록하는 부작용에 사용됩니다 init().

sql.Register("sqlite3", &SQLiteDriver{})

이 방법으로 등록되면 sqlite3는 sql예제와 같이 코드에서 표준 라이브러리의 인터페이스 와 함께 사용할 수 있습니다 .

db, err := sql.Open("sqlite3", "./foo.db")

34

다른 답변이 그것을 완전히 설명했지만 "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) }

17

https://golang.org/doc/effective_go.html#blank

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


다음 은 해당 페이지의 부작용 가져 오기 앵커에 대한 링크 입니다. "때로는 명시 적으로 사용하지 않고 부작용에 대해서만 패키지를 가져 오는 것이 유용합니다"및 "부작용에 대해서만 패키지를 가져 오려면 빈 식별자로 패키지 이름을 바꾸십시오"라고 설명합니다.
Luke Sheppard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.