Go mod 사용
go modules
골 랑 1.11 에 새로 추 가 된 특성 입 니 다.지금 1.12 가 발표 되 었 으 니 쓸 때 가 되 었 다.Modules 공식 정의:모듈 은 관련 Go 패키지 의 집합 입 니 다.modules 는 소스 코드 교환 과 버 전 제어 장치 입 니 다.go 명령 은 다른 모듈 에 대한 의존 도 를 기록 하고 해석 하 는 modules 를 직접 지원 합 니 다.modules 는 주어진 빌 드 에 어떤 원본 파일 을 사용 할 지 지정 하기 위해 GOPATH 기반 의 오래된 방법 을 대체 합 니 다.
Modules 를 어떻게 사용 합 니까?
GO111MODULE
GO111MODULE
세 가지 값 이 있 습 니 다.off
,on
과auto( )
.GO111MODULE=off
go 명령 행 은 module 기능 을 지원 하지 않 습 니 다.가방 에 의존 하 는 방식 을 찾 는 것 은 오래된 버 전 으로 vendor 디 렉 터 리 나 GOPATH 모드 를 통 해 찾 을 수 있 습 니 다.GO111MODULE=on
go 명령 길드 는 modules 를 사용 하고 GOPATH 디 렉 터 리 에서 찾 지 않 습 니 다.GO111MODULE=auto
기본 값,go 명령 줄 은 현재 디 렉 터 리 에 따라 module 기능 을 사용 할 지 여 부 를 결정 합 니 다.이런 상황 에서 두 가지 상황 으로 나 눌 수 있다.modules 기능 이 활성화 되 었 을 때 가방 에 의존 하 는 저장 위치 가 변경 되 었 습 니 다.
$GOPATH/pkg
같은 패키지 여러 버 전이 병존 할 수 있 고 여러 항목 이 캐 시 모듈 을 공유 할 수 있 습 니 다.go mod
골 랑 은 가방 을 관리 하 라 는 명령 을 내 렸 다.
go mod 는 다음 명령 이 있 습 니 다:
명령 하 다.
설명 하 다.
download
로 컬 캐 시 에 모듈 다운로드(의존 패키지 다운로드)
edit
도구 나 스 크 립 트 에서 go.mod 편집(go.mod 편집)
graph
print 모듈 requirement graph(인쇄 모듈 의존 도)
init
initialize new module in current directory(현재 디 렉 터 리 에서 mod 초기 화)
tidy
add missing and remove unused modules(부족 한 모듈 을 끌 어 내 고 사용 하지 않 는 모듈 을 제거 합 니 다)
vendor
make vendored copy of dependencies(vendor 에 의존)
verify
dependencies 가 예상 한 콘 텐 츠 가 있 는 지 확인(의존 도가 올 바른 지 검증)
why
패키지 나 모듈 이 필요 한 이 유 를 설명 합 니 다(왜 의존 해 야 하 는 지 설명 합 니 다)
프로젝트 에서 어떻게 사용 합 니까?
예제 1:새 항목 만 들 기
go mod
에 디 렉 터 리 를 새로 만 들 고GOPATH
생 성 초기 화go mod init
파일➜ ~ mkdir hello
➜ ~ cd hello
➜ hello go mod init hello
go: creating new go.mod: module hello
➜ hello ls
go.mod
➜ hello cat go.mod
module hello
go 1.12
go.mod 파일 이 생 성 되면 그 내용 은 go toolchain 에 의 해 전면적으로 통 제 됩 니 다.go toolchain 은 각종 명령 이 실 행 될 때,예 를 들 어 go get,go build,go mod 등 이 go.mod 파일 을 수정 하고 유지 합 니 다.
go.mod 는
go.mod
,module
,require
와replace
네 가지 명령 을 제공 했다.exclude
문구 지정 가방 의 이름(경로)module
문구 가 지정 한 의존 항 모듈require
문 구 는 의존 항 모듈replace
문 구 는 의존 항 모듈package main
import (
"net/http"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
실행
exclude
코드 를 실행 하면 go mod 가 자동 으로 찾 아 자동 다운로드 에 의존 하 는 것 을 발견 할 수 있 습 니 다.$ go run server.go
go: finding github.com/labstack/echo v3.3.10+incompatible
go: downloading github.com/labstack/echo v3.3.10+incompatible
go: extracting github.com/labstack/echo v3.3.10+incompatible
go: finding github.com/labstack/gommon/color latest
go: finding github.com/labstack/gommon/log latest
go: finding github.com/labstack/gommon v0.2.8
#
...
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on [::]:1323
현재 go.mod 내용 보기:
$ cat go.mod
module hello
go 1.12
require (
github.com/labstack/echo v3.3.10+incompatible // indirect
github.com/labstack/gommon v0.2.8 // indirect
github.com/mattn/go-colorable v0.1.1 // indirect
github.com/mattn/go-isatty v0.0.7 // indirect
github.com/valyala/fasttemplate v1.0.0 // indirect
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a // indirect
)
go module 패 키 지 를 설치 하 는 원칙 은 최신 release tag 를 먼저 당 기 는 것 입 니 다.tag 가 없 으 면 최신 commt 를 당 기 는 것 입 니 다.자세 한 내용 은 Modules 공식 소개 참조.go 는 dependency tree 를 기록 하기 위해 go.sum 파일 을 자동 으로 생 성 합 니 다.
$ cat go.sum
github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg=
github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=
github.com/labstack/gommon v0.2.8 h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0=
github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4=
github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
...
go run server.go
검사 및 설치 의존 절 차 를 건 너 뛰 었 습 니 다.go run server.go
으로 검사 할 수 있 습 니 다.go list -m -u all
업그레이드 후 새로운 의존 버 전 을 go.mod 로 업데이트 합 니 다.go get -u need-upgrade-package
모든 의존 도 업그레이드go get 업그레이드
항목 디 렉 터 리:
$ tree
.
├── api
│ └── apis.go
└── server.go
1 directory, 2 files
server.go 소스 코드:
package main
import (
api "./api" //
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/", api.HelloWorld)
e.Logger.Fatal(e.Start(":1323"))
}
api/apis.go 소스 코드:
package api
import (
"net/http"
"github.com/labstack/echo"
)
func HelloWorld(c echo.Context) error {
return c.JSON(http.StatusOK, "hello world")
}
go get -u
go.mod 초기 화$ go mod init helloworld
go: creating new go.mod: module helloworld
go mod init ***
go: finding github.com/labstack/gommon/color latest
go: finding github.com/labstack/gommon/log latest
go: finding golang.org/x/crypto/acme/autocert latest
go: finding golang.org/x/crypto/acme latest
go: finding golang.org/x/crypto latest
build command-line-arguments: cannot find module for path _/home/gs/helloworld/api
우선 설치 의존 도 를 찾 고 다운로드 한 다음 스 크 립 트
go run server.go
를 실행 합 니 다.오류 가 발생 합 니 다.build command-line-arguments: cannot find module for path _/home/gs/helloworld/api
하지만
server.go
업데이트:$ cat go.mod
module helloworld
go 1.12
require (
github.com/labstack/echo v3.3.10+incompatible // indirect
github.com/labstack/gommon v0.2.8 // indirect
github.com/mattn/go-colorable v0.1.1 // indirect
github.com/mattn/go-isatty v0.0.7 // indirect
github.com/valyala/fasttemplate v1.0.0 // indirect
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a // indirect
)
그런데 왜 이 잘못 을 던 졌 을 까?
이 는 server.go 에서 internal package 를 사용 하 는 방법 이 이전 과 다 르 기 때 문 입 니 다.go.mod 는 같은 작업 디 렉 터 리 에 있 는 모든 package 를 스 캔 하고
go.mod
helloworld 를 경로 의 접두사 로 해 야 하기 때 문 입 니 다.즉,import helloworld/api 로 써 야 합 니 다.기 존 GOPATH/dep 모드 에서 허용 되 었 던 import./api 가 효력 을 잃 었 습 니 다.자세 한 내용 은 이 issue 를 볼 수 있 습 니 다.package main
import (
api "helloworld/api" //
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/", api.HelloWorld)
e.Logger.Fatal(e.Start(":1323"))
}
:golang 1.11 에서 go mod 를 사용 하기 시 작 했 습 니 다.
이런 오 류 는 이러한 1.12 로 업그레이드 해 야 하 는 문제 에 부 딪 히 면 골 랑 1.12 를 직접 업그레이드 하면 됩 니 다.다행히 1,12 발표 후에 시 도 했 어 요.go build github.com/valyala/fasttemplate: module requires go 1.12
♂️ 일부 알려 진 원인 으로 인해 모든 패키지 가 성공 적 으로 다운로드 되 는 것 은 아 닙 니 다.예 를 들 어
go mod
아래 의 가방 입 니 다.modules 는 go.mod 파일 에서 replace 명령 을 사용 하여 github 에 대응 하 는 라 이브 러 리 로 바 꿀 수 있 습 니 다.예 를 들 어:
replace (
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)
혹은
replace golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
참조 링크
[1]Modules 공식 소개:https://github.com/golang/go/...[2] issue: https://github.com/golang/go/...[3]이런 오류:https://github.com/golang/go/...[4]Modules 공식 소개:https://github.com/golang/go/...[5]Golang 1.11 새로운 기능 소개–모듈:https://www.lightblue.asia/go...[6] What are Go modules and how do I use them?: https://talks.godoc.org/githu...[7] go mod doesn't work for github.com/gomarkdown/markdown/html : https://github.com/golang/go/...[8]go modules 재 탐색:사용 및 세부 사항:https://www.cnblogs.com/apoce...[9]Go 모듈 을 처음 본다:https://tonybai.com/2018/07/1...
마지막 으로 여자친 구 의 지지 와 포용 에 감 사 드 립 니 다.❤️
다음 키 워드 를 입력 하여 과거 기록 을 얻 을 수 있 습 니 다:
golang.org
| &
|
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue2 + VueRouter 2 + Webpack + Axios 구축 프로젝트 실전 2017 재 제판 (3) 프로젝트 의 모든 파일 인식또한 static 자원 디 렉 터 리 는 서로 다른 자원 을 배치 하 는 데 따라 서로 다른 하위 폴 더 를 구축 해 야 합 니 다. 우리 의 이 항목 은 두 페이지 를 만 드 는 것 입 니 다. 우 리 는 기본 적...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.