마이라이프해피라이프
[golang] go import error (2) 본문
1. 2번째 시도
저번에 go import error를 해결하려다 실패하고 다른 방법을 찾아 올렸었는데
이번에 또 다른 패키지를 설치하면서 '이대로는 못 살겠다'는 생각이 들어 근본적인 해결책을 찾아보고자 하였다.
다시 해결책을 찾아보면서 이건 분명 근본적으로 gopath, goroot에 문제가 있는 것이라는 생각이 들었다.
gopath, goroot는 따로 설정했을 수도 있고 아닐 수도 있다.
go 공식 홈페이지에도 gopath를 설정하는 법이 설명되어 있다.
정확히 기억이 나진 않지만 설치 과정 중에서 ~/.zshrc 파일을 열어 go와 관련된 설정을 추가했었다.
go path와 go root에 대한 개념이 없어 그냥 따라하라는 대로 따라했던 것 같다.
2. GO PATH, GO ROOT
다시 찾아보면서 go path와 go root에 대한 개념을 잘 정리해놓은 블로그를 찾았다.
https://blog.outsider.ne.kr/1349
쉽게 생각하면 go root는 go가 설치된 곳, go path는 go pkg를 다운 받아지는 곳을 설정하는 것이다.
사용하는 운영체제에 따라 설정하는 법이 달랐고, window wsl 위에서 작업하는 사람들을 위한 글은 별로 없었다.
(아마 이 글을 읽고 있는 사람 중에 window나 다른 os를 사용하고 있다면 다른 관련 글을 찾아보는 것이 좋을 것 같다)
처음으로 프로젝트를 생성할 때
/usr/local/go/src/github.com/<user name>/<repo name> 에서 작업을 시작했고,
/usr/local/go/src/ 안에서 pkg를 관리하길 원했다. -> 이렇게 설정해야 import할 때 "github/~" 로 간단하게 import할 수 있다.
위의 블로그 글을 읽고 .zshrc파일을 열어 go path와 go root를 수정했다.
go path는 /usr/local/go 로 설정했고, go root는 $HOME/go 로 설정했다.
(처음에는 go가 /usr/local/go 에서 모두 관리된다고 생각하여 go path, go root를 모두 /usr/local/go로 설정했으나 go path와 go root는 다르게 설정되어야 한다고 하여 변경했다.)
이렇게 설정을 해도 문제는 해결되지 않았다.
그러던 중 stackoverflow에서 새로운 글 하나를 발견했다.
3. go.mod
https://stackoverflow.com/questions/61845013/package-xxx-is-not-in-goroot-when-building-a-go-project
In newer versions (post 1.13) of Go, you don't need to set environment variables like GOPATH, GOBIN, etc.
You also need to have a go.mod file at the project root. This will make the directory a Go module. This is also where the .git/ is located. This means that only one go.mod is needed per repository. Inside the project root you could do a go mod init remote-repo.com/username/repository
라고 적힌 부분이 있었다. go version으로 확인해보니 go version은 1.12였다. 여기에 해당되는 부분인지 확실하지는 않지만, 다른 선택지가 없었기에 시도해보기로 했다.
go mod init github.com/<user name>/<repo name> 을 입력했다.
to add module requirements and sums: go mod tidy라는 메세지가 떠서 go mod tidy를 입력했다.
go mod는 저번에 오류를 겪었을 때 조금 알아보았는데 go의 패키지를 관리하기 위해 사용하는 것 같다.https://jonnung.dev/go/2021/12/12/go-installation-package-management/#gsc.tab=0
관련해서는 이 블로그를 확인해보면 좋을 것 같다.
설정을 완료하고 source ~/.zshrc와 vscode 재부팅을 했다.
go get "github~"로 원하는 pkg를 설치하니 /usr/local/go/src안에 pkg라는 새로운 폴더가 생성되었다.
vscode에서도 에러가 사라졌다. 하지만 자동 import는 되지 않았다.
go list -m all
을 통해 설치된 패키지를 확인했다. 원하는 패키지가 설치되어있지 않으면
go get을 통해 설치하면 된다.
자동으로 import되지는 않았지만 go run main.go를 실행했을 때 문제없이 실행됐다.
잘못된 정보가 있을 시 알려주세요! 바로 수정하겠습니다 😅
'컴퓨터 > Go' 카테고리의 다른 글
[golang] 의존성 정리 (0) | 2023.04.03 |
---|---|
[golang] go import error (0) | 2023.03.24 |