gex에서 Go 프로젝트 개발 도구의 의존성 관리
7584 단어 Go
TL;DR
go generate
에 사용된 물건과 linter 등 개발용 도구도 버전을 고정시키고 싶다사용gex 간단히 완료
관리 도구 및 개발 도구 의존
Go의 종속 관리 도구는 현재 광범위하게 사용되고 있습니다dep. 또한 Go1.11부터 ExperimentalModules도 사용할 수 있습니다(Modules에 관해서는 Go1.11의 modules·vgo를 시도해 보세요. - 실제 사용에서 반드시 고려해야 할 것들.라는 글에서 간단하게 소감을 썼습니다. 가능하다면 보십시오).
이러한 의존 관리 도구는 코드
import
의 패키지를 잘 관리하여 버전 잠금을 진행할 수 있다.개발 도구 관리
다른 한편, 개발할 때 사용하는 실행 가능한 도구는 흥미가 없다.
흔한 예는
mockgen(Mok 생성)
statik(static 파일 포함)
sqlboiler(ORM 코드 생성)
protoc
플러그인go generate
매번 diffmockgen
(코드 생성 도구) 및 mock
(코드에서 사용하는 라이브러리)의 버전이 분리되어 이동할 수 없음dep의required
우선, deprequired 설명을 통해import 도구가 없어도 관리할 수 있습니다에 관하여.
required = [
"github.com/golang/mock/mockgen",
]
그러나 여기서 바이너리 파일을 올바르게 구축하고 생성하려면 3시간 정도 걸립니다.# `go install` でプロジェクトローカルに出力されるように `GOBIN` を書き換え
$ export GOBIN=$PWD/bin
# `PATH` を通す
$ export PATH=$GOBIN:$PATH
# ビルドする
$ cd vendor/github.com/golang/mock/mockgen
$ go install .
이거 할 때마다 대체스스로 이용했다
Makefile
의define
.DEP_SRCS := \
github.com/golang/mock/mockgen \
golang.org/x/lint/golint
DEP_BINS := $(addprefix $(BIN_DIR)/,$(notdir $(DEP_SRCS)))
define dep-bin-tmpl
$(eval OUT := $(BIN_DIR)/$(notdir $(1)))
$(OUT): dep
@echo "--> Installing $(OUT)..."
@cd vendor/$(1) && GOBIN="$(BIN_DIR)" go install .
endef
$(foreach src,$(DEP_SRCS),$(eval $(call dep-bin-tmpl,$(src))))
그러나'도구를 추가할 때Gopkg.toml
와Makefile
둘 다 기술해야 할 군더더기'와'원래Makefile
는 너무 복잡해서 유지하기 어렵다'는 문제가 존재한다.기타 개발용 도구 관리 방법
이 문제를 처리하는 데 쓰이는 도구가 몇 개 있다.
gex 개발 도구 관리
지금까지'개발용 도구의 관리'에서 원하는 것을 정리하면 다음과 같은 조건을 충족하면 된다.
예를 들어, 종속성에
mockgen
을 추가하려면 다음 명령을 수행합니다.$ gex --add github.com/golang/mock/mockgen
mockgen
를 실행하려면 gex mockgen ...
처럼,add에서 직접 두드려서 $PWD/bin
생성된 2진법을 사용할 수 있습니다. 또한 gex --build
2진법을 다시 생성할 수도 있습니다. direnv와export PATH=$PWD/bin:$PATH
의Makefile
도 잘 어울립니다.gex는 어떻게 2진법을 관리합니까
gex는 cmd/go: clarify best practice for tool dependencies · Issue #25922 · golang/go에서 소개한 내용을 간단하게 설치했다.
gex --add <path/to/cmd>
중 다음과 같은 행위가 있다.실행
go get ...
또는 dep ensure -add ...
실행
go build -o ./bin/<cmd> <path/to/cmd>
쓰기
tools.go
tools.go
패키지blankimport의 파일일 뿐입니다.buildconstraint에 적당한 내용을 썼기 때문에 구축할 때 참조되지 않습니다.// Code generated by github.com/izumin5210/gex. DO NOT EDIT.
// +build tools
package tools
// tool dependencies
import (
_ "github.com/golang/mock/mockgen"
)
dep와 Modules는 이 파일import
에 있기 때문에 도구의 버전도 정확하게 관리할 수 있습니다.총결산
개발용 도구(CLI)의 관리gex를 소개했습니다. 기억하는 것은
gex --add
정도입니다. 관리 자체는 dep와 Modules에 버려져 있기 때문에 어떤 환경에서도 쉽게 가져올 수 있습니다.이것들은 모두 모듈에 흡수될 것 같지만, 반드시 이전의 연결에 사용하십시오.
한편 원티드 테크북5에서는 실제로 gex를 어떻게 사용하는지 등을 소개했다.기술서전 5 ~ 20 발표 예정이니 잘 부탁드린다
Reference
이 문제에 관하여(gex에서 Go 프로젝트 개발 도구의 의존성 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/izumin5210/items/59a29371809e36d64e04텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)