Go 튜토리얼과 내가 본 대부분의 Go 코드에서 패키지는 다음과 같이 가져옵니다.
import (
"fmt"
"os"
"launchpad.net/lpad"
...
)
그러나 http://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go 에서 gocheck 패키지는 .
(마침표)로 가져옵니다 .
import (
"http"
. "launchpad.net/gocheck"
"launchpad.net/lpad"
"os"
)
.
(기간) 의 중요성은 무엇입니까 ?
답변
임포트 된 패키지의 식별자를 규정 자없이 로컬 파일 블록에서 참조 할 수 있습니다.
이름 대신 명시적인 마침표 (.)가 나타나면 모든 패키지의 내 보낸 식별자가 현재 파일의 파일 블록에 선언되고 한정자없이 액세스 할 수 있습니다.
Sin 함수를 내보내는 package 절 package math가 포함 된 패키지를 컴파일하고 컴파일 된 패키지를 “lib / math”로 식별되는 파일에 설치했다고 가정합니다. 이 표는 다양한 유형의 가져 오기 선언 후 패키지를 가져 오는 파일에서 Sin에 액세스하는 방법을 보여줍니다.
Import declaration Local name of Sin
import "lib/math" math.Sin
import M "lib/math" M.Sin
import . "lib/math" Sin
답변
다음은 파이썬에서 온 사람들에 대한 비유입니다.
- Go
import "os"
는 Python과 거의 같습니다.import os
- Go
import . "os"
는 Python과 거의 같습니다.from os import *
두 언어 모두 후자를 사용하는 것은 일반적으로 눈살을 찌푸리고 있지만 그럴만한 이유가있을 수 있습니다.
답변
테스트시에만 사용해야합니다.
mockgen과 같은 일부 모의 코드를 생성하고 패키지 코드 를 가져오고 테스트 패키지 도 패키지 코드를 가져 오는 경우 순환 종속성을 얻습니다 (Something golang은 사용자가 해결 방법을 결정할 수 있도록 선택합니다).
그러나 테스트 패키지 내부에서 테스트중인 패키지에 점 표기법을 사용하는 경우 동일한 패키지로 취급되며 순환 종속성이 없습니다!