로컬 go 파일을 다른 go 파일로 가져 오는 데 어려움이 있습니다.
내 프로젝트 구조는 아래와 같습니다.
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
b.go 안에 a.go를 가져 오려고합니다. 나는 다음을 시도했다.
import "a"
import "github.com/xxxx/a"
이것들 중 어느 것도 효과가 없었습니다 .. 나는 GOPATH와 간섭해야한다는 것을 이해하지만 제대로 할 수 없었습니다. 현재 내 GOPATH가 samplego (/ workspace / samplego)를 가리키고 있습니다. 아래 오류가 발생합니다.
cannot find package "a" in any of:
/usr/local/go/src/pkg/a (from $GOROOT)
/workspace/samplego/src/a (from $GOPATH)
또한 이러한 소스 파일을 다른 프로젝트 / 모듈로 가져올 때 GOPATH는 어떻게 작동합니까? 그렇다면 현지 수입이 문제가 될까요? 이 경우 모범 사례는 무엇입니까-모듈에 하나의 go 파일 (관련 테스트 포함) 만있는 것입니까?
답변
디렉토리의 모든 파일은 단일 패키지입니다. 한 파일에서 선언 된 기호는 import
s 또는 한정자 없이 다른 파일에서 사용할 수 있습니다 . 모든 파일 package foo
의 맨 위에 동일한 선언 이 필요합니다 (또는에서 오류가 발생합니다 go build
).
당신은 필요합니까 GOPATH
당신의 디렉토리로 세트를 pkg
, src
및 bin
디렉토리가 존재합니다. 이것은 단지 선호도의 문제이지만, 앱당 하나가 아닌 모든 앱 (때때로 $HOME
)에 대해 하나의 작업 공간을 갖는 것이 일반적 입니다.
일반적으로 Github 경로는 github.com/username/reponame
(단지 github.com/xxxx
)입니다. 따라서 main
다른 패키지 를 갖고 싶다면 다음 workspace/src
과 같은 작업을 끝낼 수 있습니다.
github.com/
username/
reponame/
main.go // package main, importing "github.com/username/reponame/b"
b/
b.go // package b
항상 전체 github.com/...
경로를 사용하여 가져옵니다 . 상대 가져 오기는 작업 공간에서 허용되지 않습니다. 경로 입력에 지쳤 으면 goimports
. 당신이을 사용하고 있다면 go run
, 다음으로 전환해야 할 때입니다 go build
: run
여러 파일을 제대로 처리하지 main
않았고 테스트를 귀찮게하지 않았지만 ( 여기 Dave Cheney 에서 ) go run
더러운 종속성을 다시 빌드하지 않는다고 들었습니다 .
적어도 GOPATH를 올바른 것으로 설정하려고 시도한 것처럼 들리므로 여전히 멈춘 경우 환경 변수 (명령 등)를 설정하는 방법과 실행 한 명령 및 발생한 오류를 정확히 포함 할 수 있습니다. 다음은 Linux / UNIX에서이를 설정 (및 설정을 지속적으로 유지)하는 방법에 대한 지침 이며 작업 공간 설정에 대한 Go 팀의 조언입니다 . 둘 다 도움이되지 않을 수도 있지만, 혼란 스러울 경우 어느 부분이 혼란 스러울 지 살펴보고 적어도 어느 부분을 가리켜보십시오.
답변
당신이 두 선언으로 어떤 가져 오기가 긴으로 필요하지 않습니다 a.go
와 b.go
같은 패키지에있을 수 있습니다. 그런 다음 다음을 사용 go run
하여 여러 파일을 인식하는 데 사용할 수 있습니다 .
$ go run a.go b.go
답변
./main.go (메인 패키지)
./a/a.go (패키지 a)
./a/b.go (패키지 a)
이 경우 :
main.go import “./a”
a.go 및 b.go의 함수를 호출 할 수 있습니다.
답변
user2889485의 답장과 같이 일부 파일을 기본 폴더에서 옮기기 위해 정말 기본적인 것을 원했지만 그의 특정 대답은 저에게 효과적이지 않았습니다. 나는 그들이 같은 패키지에 있든 아니든 상관하지 않았습니다.
내 GOPATH 작업 공간이 c:\work\go
있고 그 아래에 있습니다.
/src/pg/main.go (package main)
/src/pg/dbtypes.go (pakage dbtypes)
에서 main.go
I import "/pg/dbtypes"