특정buildtag이 있는 상황에서 처리
2407 단어 Go
buildtag을 사용하면 구축할 파일을 전환할 수 있습니다.
이번에는buildtag을 지정한 상태에서만 함수를 실행하는 조수 함수와 이 조수 함수 코드를 생성하는 명령을 패키지화했습니다.
buildtag 처리 방법
buildtag을 지정하거나 지정하지 않은 상태에서 처리합니다. 어떻게 쓰시겠습니까?
예를 들어 우리는'debug'이 교부되었을 때go build -tags "debug"
만 유효한 상황을 고려할 것이다.
일반적인 방법
주석에 기술Build Constraints.
myapp_debug.go// +build debug
func init() {
app.InitDebugLog()
}
나는 이렇게 쓰는 것이 가장 이해하기 쉽다고 생각한다.
나른한 작법
아래의 사람들을 위해 이buildcond 포장을 만들었습니다.
장점
// +build debug
func init() {
app.InitDebugLog()
}
예제
myapp.go import "github.com/shu-go/buildcond/cond" func main() { // init hogehoge // : cond.IfDebug(func() { app.InitDebugLog() }) } go get github.com/shu-go/buildcond/... ※ 마지막 "/..."필요한 거야. 함수buildcond/cond.IfDebug에 debug 태그가 있는 구문인지 여부를 판단합니다. debug이면 매개 변수 함수를 호출합니다. 그렇지 않으면 호출하지 않습니다. 어려운 일은 고려하지 않아도 구축 조건을 고려한 코드를 기술할 수 있다. 결점 하지만 단점도 있다. IfDebug 가 실행되지 않아도 결과적으로 호출되므로 속도가 떨어집니다. 바이너리에는 불필요한 코드가 포함되어 있다 환경 의존 코드를 포함하면 구축할 수 없습니다 유형 정의는 변경할 수 없습니다. 예에서 보듯이 추가로 처리할 수 있는 처리를 전환하는 데 사용하는 것이 가장 적합하다고 생각합니다. 명령buildcond buildcond는 명령buildcond를 첨부합니다. 이 명령을 사용하면 마음에 드는buildtag의 원본 코드를 판단할 수 있습니다. 이 명령은 매개 변수에 지정한 탭의 코드와 비코드의 코드를 생성합니다. 위 예에 나타난 함수 IfDebug는 명령으로 생성됩니다. //go:generate buildcond --tag=debug --pkg=cond // 엄밀히 말하면 이렇게 해석한다... go:generate buildcond] g=debug-pkg = conte-output=cond 텍스트 / template를 사용하여 원본 파일을 만드는 것은 매우 간단합니다. 기존 원본 파일을 분석하지 않고 매번 대상 파일을 덮어씁니다. 파일 단위로 정해진 코드를 뱉는 정도여서 AST도 보지 않았다. 손에 넣은 곳을 말하자면template다.심지어 펑크맵을 자본화하기도 했다. funcMap := template.FuncMap{ "capitalize": strings.Title, } templ, err := template.New("tag").Funcs(funcMap).Parse(templText) // : //templText의 내용(일부) func If{{capitalize .Tag}}(f func()) {
Reference
이 문제에 관하여(특정buildtag이 있는 상황에서 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chimatter/items/c5b262b97d50cba54575텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)