Go, go get, go install, 로컬 패키지 및 버전 제어
로컬 패키지가있는 go 프로젝트를 만들기위한 워크 플로를 이해하는 데 문제가 있습니다.
버전 제어를 위해 git을 사용하여 새 프로젝트를 생성한다고 가정 해 보겠습니다.이 프로젝트에는 main.go 파일과 패키지 utils에 포함될 tools.go 파일이 있습니다. 따라서 다음과 같은 디렉토리 구조가 있습니다.
/myproject/
main.go
utils/
tools.go
main.go는 다음과 같습니다.
package main
import "./utils"
func main() {
utils.DoSomthing()
}
및 tools.go는 다음과 같습니다.
package utils;
func DoSomething() {
}
go build 및 go run을 사용하여 모든 것이 로컬에서 잘 작동 합니다 . 그러나 이것은 github에서 호스팅되고 있으며 다른 사람들이 go get 명령을 사용하여 설치 하도록 할 수 있기를 바랍니다. 따라서 로컬 패키지 가져 오기는 "github.com/user/project/utils"형식을 사용하도록 변경해야합니다.하지만 이제는 소스 코드의 복사본이 두 개 있고 실제 문제는 자식 기록이있는 복사본입니다. 다운로드 한 사본을 사용하는 가져 오기가 있습니다. 따라서 git 히스토리로 복사본을 작업하는 경우 tools.go에 대한 변경 사항은 다운로드 된 복사본을 사용하기 때문에 눈에 띄지 않게됩니다.
그래서 누군가가 같은 프로젝트 내에서 go get , 버전 제어 및 패키지 가져 오기 를 사용하는 올바른 방법을 설명 할 수 있는지 궁금합니다 .
새로운 go 도구 와 github.com을 사용하는 방법에 대한 간단한 단계별 가이드를 작성했습니다 . 유용 할 수 있습니다.
1. GOPATH 설정
환경 변수 GOPATH
를 원하는 디렉토리로 설정할 수 있습니다 . 더 큰 프로젝트가있는 경우 각 프로젝트에 대해 다른 GOPATH를 만드는 것이 좋습니다. 특히 배포에이 접근 방식을 권장하므로 프로젝트 A의 라이브러리를 업데이트해도 동일한 라이브러리의 이전 버전이 필요할 수있는 프로젝트 B가 중단되지 않습니다.
또한 GOPATH를 콜론으로 구분 된 디렉토리 목록으로 설정할 수 있습니다. 따라서 일반적으로 사용되는 모든 패키지를 포함하는 GOPATH와 추가 패키지 또는 기존 패키지의 다른 버전이있는 각 프로젝트에 대한 별도의 GOPATH를 가질 수 있습니다.
그러나 동시에 많은 다른 Go 프로젝트에서 작업하지 않는 한 로컬에 하나의 GOPATH 만 있으면 충분합니다. 이제 하나를 만들어 보겠습니다.
mkdir $HOME/gopath
그런 다음 두 개의 환경 변수를 설정하여 기존 Go 패키지를 찾을 수있는 위치와 새 패키지를 설치할 위치를 go 도구 에 알려야합니다 . ~/.bashrc
또는에 다음 두 줄을 추가하는 것이 가장 좋습니다 ~/.profile
(그리고 나중에 .bashrc를 다시로드하는 것을 잊지 마십시오).
export GOPATH="$HOME/gopath"
export PATH="$GOPATH/bin:$PATH"
2. 새 프로젝트 만들기
나중에 github.com 에서 호스팅해야하는 새 Go 프로젝트를 생성하려면 $GOPATH/src/github.com/myname/myproject
. go 도구는 동일한 규칙을 따르기 때문에 경로가 github.com repo의 URL과 일치하는 것이 중요합니다. 이제 프로젝트 루트를 만들고 거기에서 새 git 저장소를 초기화 해 보겠습니다.
mkdir -p $GOPATH/src/github.com/myname/myproject
cd $GOPATH/src/github.com/myname/myproject
git init
긴 경로를 입력하는 것을 좋아하지 않기 때문에 일반적으로 현재 홈 폴더에서 작업중인 프로젝트에 대한 심볼릭 링크를 만듭니다.
ln -s $GOPATH/src/github.com/myname/myproject ~/myproject
3. 신청서 작성
코딩을 시작하고 파일 git add
과 git commit
파일을 잊지 마세요 . 또한 import "./utils"
하위 패키지 와 같은 상대적 가져 오기를 사용하지 마십시오 . 현재 문서화되지 않았으며 go 도구에서 작동하지 않으므로 전혀 사용해서는 안됩니다. github.com/myname/myproject/utils
대신 수입품을 사용하십시오 .
4. Publish your project
Create a new repository at github.com, upload your SSH public key if you haven't done that before and push your changes to the remote repository:
git remote add origin git@github.com:myname/myproject.git
git push origin master
5. Continue working on your project
If you have set the GOPATH in your .bashrc and if you have created a symlink to your project in your home folder, you can just type cd myproject/
and edit some files there. Afterwards, you can commit the changes using git commit -a
and send them to github.com by doing a git push
.
You probably don't want two copies of the source. Following How to Write Go Code, you should have a path where you do your Go development, lets say "godev", and under that, a "src" directory, and under that, your "github.com/user/project" and "github.com/user/project/utils". (I agree, it seems a little rigid, but the advantage explained to us is freedom from make files.) Ditch the myproject, this is where you will do your work.
You will have GOPATH set to godev at least, but you will probably want your GOPATH to start with a path for external packages that are not yours. For example the GOPATH I use is <my place on the file system>/goext:<my place on the file system>/godev
.
You are right that your import in main.go should now read "github.com/user/project/utils.
Don't worry about go get or any of the go commands overwriting your files or messing up version control. Through GOPATH, they see where you are working and they know how version control works.
If you want to keep your code in local version repository, just put your code in GOPATH.
GOPATH accepts multiple paths. eg. on linux
GOPATH=$HOME/go:$HOME/prj/foo
So, you could go get 3rd party packages installed in $HOME/go/src/... And, you could keep your code controlled in $HOME/prj/foo/src.
ref: go help gopath
lot of people say should use absolutlly path to construct project struct and import :
import "github.com/user/utils"
but this may limit your project within a single repo (github). I would like to use relative path instead :
import "./utils"
I havn't find a way to do that, I raise a question here: how to oraganize GO project packages if it will hosted on different repos(github & sourceForge)
참고URL : https://stackoverflow.com/questions/10130341/go-go-get-go-install-local-packages-and-version-control
'IT박스' 카테고리의 다른 글
Maven 릴리스 플러그인 실패 : 소스 아티팩트가 두 번 배포 됨 (0) | 2020.12.12 |
---|---|
assert가 많이 사용되지 않는 이유는 무엇입니까? (0) | 2020.12.12 |
Python 요청 모듈로 PDF 파일 다운로드 및 저장 (0) | 2020.12.11 |
base 64 문자열을 각도 (2+)로 인코딩 및 디코딩 (0) | 2020.12.11 |
C ++의 64 비트 ntohl ()? (0) | 2020.12.11 |