저는 처음으로 현지화하려는 예제 코드를 작성하고 있습니다.
원래 main.go
수입 명세서 에서는 다음과 같습니다.
import (
"log"
"net/http"
"github.com/foo/bar/myapp/common"
"github.com/foo/bar/myapp/routers"
)
이제 내가 가지고 common
있고 routers
포장/home/me/go/src/myapp
그래서 import 문을 다음과 같이 변환했습니다.
import (
"log"
"net/http"
"./common"
"./routers"
)
하지만 실행할 때 go install myapp
다음 오류가 발생합니다.
can't load package: /home/me/go/src/myapp/main.go:7:3: local import "./common" in non-local package
또한, 나는 사용할 때 common
와 routers
대신 ./common
과 ./routers
import 문에, 내가 얻을 :
myapp/main.go:7:3: cannot find package "common" in any of:
/usr/local/go/src/common (from $GOROOT)
/home/me/go/src/common (from $GOPATH)
myapp/main.go:8:2: cannot find package "routers" in any of:
/usr/local/go/src/routers (from $GOROOT)
/home/me/go/src/routers (from $GOPATH)
이 문제를 어떻게 해결할 수 있습니까?
답변
글쎄, 나는 문제를 알아 냈다. 기본적으로 가져 오기 시작 경로는$HOME/go/src
따라서 myapp
패키지 이름 앞에 추가 해야합니다. 즉, 가져 오기는 다음과 같아야합니다.
import (
"log"
"net/http"
"myapp/common"
"myapp/routers"
)
답변
위의 Go 1.5를 사용하는 경우 공급 업체 기능을 사용해 볼 수 있습니다 . 로컬 패키지를 공급 업체 폴더 에 넣고 더 짧은 경로로 가져올 수 있습니다. 귀하의 경우에는 공급 업체 폴더 안에 common 및 routers 폴더를 넣을 수 있습니다.
myapp/
--vendor/
----common/
----routers/
------middleware/
--main.go
다음과 같이 가져옵니다.
import (
"common"
"routers"
"routers/middleware"
)
Go는 $ GOPATH / src 대신 프로젝트의 공급 업체 디렉토리 (최소 하나의 .go 파일이있는 경우)에서 시작하여 패키지를 조회하려고 시도하기 때문에 작동합니다.
참고 :이 기능을 사용하면 패키지에 대한 “모든 종속성 코드”를 자신의 프로젝트 디렉터리에 넣을 수 있으므로 모든 빌드에 대해 항상 동일한 종속성 버전을 얻을 수 있으므로 공급 업체와 더 많은 작업을 수행 할 수 있습니다. python의 npm 또는 pip와 비슷하지만 프로젝트에 종속성을 수동으로 복사해야합니다.
이 기능에 대한 자세한 내용을 보려면 여기를 찾아보십시오.
공급 업체 폴더 이해 및 사용 by Daniel Theophanes
Lucas Fernandes da Costa의 Go 종속성 관리 이해
당신이나 다른 누군가가 도움이 되었기를 바랍니다.
답변
가져 오기 경로는 $GOPATH
및 $GOROOT
환경 변수에 상대적 입니다. 예를 들면 다음과 같습니다 $GOPATH
.
GOPATH=/home/me/go
/home/me/go/src/lib/common
및 에있는 패키지 /home/me/go/src/lib/routers
는 각각 다음 과 같이 가져옵니다.
import (
"lib/common"
"lib/routers"
)
답변
로컬 패키지는 이동 중에 성가신 문제입니다.
우리 회사의 일부 프로젝트에서는 하위 패키지를 전혀 사용하지 않기로 결정했습니다.
$ glide install
$ go get
$ go install
모두 작동합니다.
일부 프로젝트의 경우 하위 패키지를 사용하고 전체 경로로 로컬 패키지를 가져옵니다.
import "xxxx.gitlab.xx/xxgroup/xxproject/xxsubpackage
그러나이 프로젝트를 포크하면 하위 패키지는 여전히 원본을 참조합니다.