Go Modules 및 다중 모듈 구성을 사용하여 Go Home 구현 방법
12385 단어 Go
go.mod
의 다른 모듈의 가방일 뿐입니다. 가져오려고 해도 안 됩니다.따라서 Go Modules에서 다중 모듈을 구현하는 방안을 설명하고 싶습니다.(본 보도는 내 블로그에서 전재된 보도입니다.)
TL;DR
replace
명령 사용하기 Go Modules란 무엇입니까?
먼저 Go Modules is 何?
사람을 위해 간단하게 설명한다.아시는 분은 이 절을 건너뛰세요.
Go Modules는 Go1.11부터 시험적으로 가져온 것으로 Go1.13에서 기본적으로 활성화된 새 패키지 종속성을 관리하는 방법입니다.사용 후의 실제 느낌은 이미 매우 실용적이기 때문에 새 프로젝트를 만들려면 Go Modules로 제작하는 것을 권장합니다.Go1.12에서 Go Modules를 사용하려면 GOPATH 이외의 경로에서 작업하거나 아래에 환경 변수를 설정합니다.export GO111MODULE=on
이 글은 Go1.12를 전제로 설명합니다.
Go Modules에서 관리 시작
기본 생성 디렉터리 go mod init <モジュール名>
를 시작합니다.$ mkdir go-multi-modules
$ cd go-multi-modules
$ go mod init go-multi-modules
go.mod
의 파일입니다.이것이 바로 의존 관계를 관리하는 파일이다.
go.modmodule go-multi-modules
go 1.12
일단 기본적인 굿모닝 인사부터.
빠르지만 기본적으로 Hello World
부터 처음 본다.하지만 의존 관계를 넣기 위해 go-figure 을 이용해 인사해 본다.소스 코드는 다음과 같습니다.
main.gopackage main
import(
"github.com/common-nighthawk/go-figure"
)
func main() {
myFigure := figure.NewFigure("Hello World", "", true)
myFigure.Print()
}
go build
관련 패키지를 다운로드하여 구축합니다.사전go get
이 필요하지 않기 때문에 Go Modules의 장점을 알 수 있습니다../go-multi-modules
중 집행, 무사히 인사하면 성공.$ go build
go: finding github.com/common-nighthawk/go-figure latest
$ ./go-multi-modules
_ _ _ _ __ __ _ _
| | | | ___ | | | | ___ \ \ / / ___ _ __ | | __| |
| |_| | / _ \ | | | | / _ \ \ \ /\ / / / _ \ | '__| | | / _` |
| _ | | __/ | | | | | (_) | \ V V / | (_) | | | | | | (_| |
|_| |_| \___| |_| |_| \___/ \_/\_/ \___/ |_| |_| \__,_|
go.mod
파일을 볼 때 require
줄이 추가되고 의존 관계를 추적하는 것을 볼 수 있습니다.
go.modmodule go-multi-modules
go 1.12
require github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a
그리고sum이라는 파일도 생성됩니다.의존 관계의 관리는 고다.모드만 해도 돼요. go.sum
검사에 필요한 것 같아요.자세한 내용은 여기 을 참조하십시오.
go.sumgithub.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a h1:kTv7wPomOuRf17BKQKO5Y6GrKsYC52XHrjf26H6FdQU=
github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w=
좋은 아침 인사를 포장해 보도록 하겠습니다.
그럼 매일 인사해야 돼요.어렵기 때문에 재활용을 위해 포장으로 분리해 봤습니다.pkg
디렉터리일, 그 아래에 hello-world
디렉터리, 그 아래에 hello-world.go
파일을 만듭니다.디렉토리 구성은 다음과 같습니다.이번 제작helloworld
의 포장..
├── go-multi-modules // `go build`で生成された実行ファイル
├── go.mod // `go mod init` で生成されたモジュール管理ファイル
├── go.sum // `go build`で生成されたモジュール管理ファイル(検査用)
├── main.go // メインファイル
└── pkg
└── hello-world
└── hello-world.go // 新規追加
hello-world.go
파일 내용은 다음과 같습니다.
hello-world.gopackage helloworld
import(
"github.com/common-nighthawk/go-figure"
)
func HelloWorld() {
myFigure := figure.NewFigure("Hello World", "", true)
myFigure.Print()
}
main.go
파일은 다음과 같이 다시 작성됩니다.
main.gopackage main
import (
"go-multi-modules/pkg/hello-world"
)
func main() {
helloworld.HelloWorld()
}
go build
에서 구축./go-multi-modules
및 pkg
에서 실행하고 같은 방식으로 인사하면 성공합니다.
홈 페이지로 이동하지 못했습니다.
그럼 인사도 끝났으니 이제 별일 없겠네.집에 가고 싶어요.하지만 귀가 시간 전에 세세하게 관리되고 싶지 않아 다른 모듈로 관리하는 것을 고려하고 있다.이 경우 go-home
디렉터리에서 go-home
디렉터리를 만들고 go mod init gohome
디렉터리로 이동한 다음 go-home
를 실행합니다.
디렉토리 구성은 다음과 같습니다..
├── go-multi-modules // `go build`で生成された実行ファイル
├── go.mod // `go mod init` で生成されたモジュール管理ファイル
├── go.sum // `go build`で生成されたモジュール管理ファイル(検査用)
├── main.go // メインファイル
└── pkg
├── go-home // このディレクトリ配下は別モジュールになる
│ ├── go.mod // `go mod init`で生成される
│ └── home.go // 新規追加
└── hello-world
└── hello-world.go // 挨拶パッケージ
go.mod
아래 require
는 다음과 같습니다.초기화만 했기 때문이다home.go
.
go.modmodule gohome
go 1.12
main.go
아래와 같다.
home.gopackage gohome
import("github.com/common-nighthawk/go-figure")
func GoHome() {
figure.NewFigure("Go Home!", "basic", true).Scroll(30000, 400, "right")
}
go-multi-modules
다음과 같이 고쳐 쓰십시오.
main.gopackage main
import (
"go-multi-modules/pkg/hello-world"
"go-multi-modules/pkg/go-home"
)
func main() {
helloworld.HelloWorld()
gohome.GoHome()
}
위쪽 디렉터리go build
replace
에서 구축하려고 시도하는 중 다음 오류가 발생하여 성공할 수 없습니다.모듈 읽기에 실패한 것 같습니다.$ go build
build go-multi-modules: cannot load go-multi-modules/pkg/go-home: cannot find module providing package go-multi-modules/pkg/go-home
go.mod 덕분에 Go Home 성공했습니다.
해결 방법은 매우 간단하다. 부대replace
에서 아래replace go-multi-modules/pkg/go-home => ./pkg/go-home
지령을 기술했다.replace
go build
명령을 작성하면 구축이 성공합니다.
다음은 go build
후의go.mod
이다.의존 관계 추가require
.
go.modmodule go-multi-modules
go 1.12
require (
github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a
go-multi-modules/pkg/go-home v0.0.0-00010101000000-000000000000
)
replace go-multi-modules/pkg/go-home => ./pkg/go-home //追加
그럼 구축된 후./go-multi-modules
에 실행해 보세요.순식간에 Hello World가 뜨고 Go Home!집행
우리는 마침내 완성했다.
왜 다중 모듈화를 원합니까?
그렇다면 지금까지 다모듈화 방법을 알았지만 문제의 원인이 왜 자신이 다종목이 되고 싶은지 설명하지 못했다.
이유는 C 언어 라이브러리cgo를 구축하는 모듈을 썼지만 make로 구축해야 하기 때문에git의 하위 모듈로 로컬로 포획하려면 반드시 다중 모듈 설정이 된다.다만 본가의 흔한 문제 해답 한 데이터 라이브러리에서 하나의 모듈을 추천하기 때문에 일반적으로 다중 모듈을 사용하는 것은 신중한 것이 좋다고 생각한다.
총결산
본고는 Go Modules의'다중 모듈 구성'에 초점을 맞추어 이야기 제작 방식으로 다음과 같은 내용을 설명한다.
export GO111MODULE=on
기본 생성 디렉터리
go mod init <モジュール名>
를 시작합니다.$ mkdir go-multi-modules
$ cd go-multi-modules
$ go mod init go-multi-modules
go.mod
의 파일입니다.이것이 바로 의존 관계를 관리하는 파일이다.go.mod
module go-multi-modules
go 1.12
일단 기본적인 굿모닝 인사부터.
빠르지만 기본적으로
Hello World
부터 처음 본다.하지만 의존 관계를 넣기 위해 go-figure 을 이용해 인사해 본다.소스 코드는 다음과 같습니다.main.go
package main
import(
"github.com/common-nighthawk/go-figure"
)
func main() {
myFigure := figure.NewFigure("Hello World", "", true)
myFigure.Print()
}
go build
관련 패키지를 다운로드하여 구축합니다.사전go get
이 필요하지 않기 때문에 Go Modules의 장점을 알 수 있습니다../go-multi-modules
중 집행, 무사히 인사하면 성공.$ go build
go: finding github.com/common-nighthawk/go-figure latest
$ ./go-multi-modules
_ _ _ _ __ __ _ _
| | | | ___ | | | | ___ \ \ / / ___ _ __ | | __| |
| |_| | / _ \ | | | | / _ \ \ \ /\ / / / _ \ | '__| | | / _` |
| _ | | __/ | | | | | (_) | \ V V / | (_) | | | | | | (_| |
|_| |_| \___| |_| |_| \___/ \_/\_/ \___/ |_| |_| \__,_|
go.mod
파일을 볼 때 require
줄이 추가되고 의존 관계를 추적하는 것을 볼 수 있습니다.go.mod
module go-multi-modules
go 1.12
require github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a
그리고sum이라는 파일도 생성됩니다.의존 관계의 관리는 고다.모드만 해도 돼요. go.sum
검사에 필요한 것 같아요.자세한 내용은 여기 을 참조하십시오.go.sum
github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a h1:kTv7wPomOuRf17BKQKO5Y6GrKsYC52XHrjf26H6FdQU=
github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w=
좋은 아침 인사를 포장해 보도록 하겠습니다.
그럼 매일 인사해야 돼요.어렵기 때문에 재활용을 위해 포장으로 분리해 봤습니다.
pkg
디렉터리일, 그 아래에 hello-world
디렉터리, 그 아래에 hello-world.go
파일을 만듭니다.디렉토리 구성은 다음과 같습니다.이번 제작helloworld
의 포장..
├── go-multi-modules // `go build`で生成された実行ファイル
├── go.mod // `go mod init` で生成されたモジュール管理ファイル
├── go.sum // `go build`で生成されたモジュール管理ファイル(検査用)
├── main.go // メインファイル
└── pkg
└── hello-world
└── hello-world.go // 新規追加
hello-world.go
파일 내용은 다음과 같습니다.hello-world.go
package helloworld
import(
"github.com/common-nighthawk/go-figure"
)
func HelloWorld() {
myFigure := figure.NewFigure("Hello World", "", true)
myFigure.Print()
}
main.go
파일은 다음과 같이 다시 작성됩니다.main.go
package main
import (
"go-multi-modules/pkg/hello-world"
)
func main() {
helloworld.HelloWorld()
}
go build
에서 구축./go-multi-modules
및 pkg
에서 실행하고 같은 방식으로 인사하면 성공합니다.홈 페이지로 이동하지 못했습니다.
그럼 인사도 끝났으니 이제 별일 없겠네.집에 가고 싶어요.하지만 귀가 시간 전에 세세하게 관리되고 싶지 않아 다른 모듈로 관리하는 것을 고려하고 있다.이 경우
go-home
디렉터리에서 go-home
디렉터리를 만들고 go mod init gohome
디렉터리로 이동한 다음 go-home
를 실행합니다.디렉토리 구성은 다음과 같습니다.
.
├── go-multi-modules // `go build`で生成された実行ファイル
├── go.mod // `go mod init` で生成されたモジュール管理ファイル
├── go.sum // `go build`で生成されたモジュール管理ファイル(検査用)
├── main.go // メインファイル
└── pkg
├── go-home // このディレクトリ配下は別モジュールになる
│ ├── go.mod // `go mod init`で生成される
│ └── home.go // 新規追加
└── hello-world
└── hello-world.go // 挨拶パッケージ
go.mod
아래 require
는 다음과 같습니다.초기화만 했기 때문이다home.go
.go.mod
module gohome
go 1.12
main.go
아래와 같다.home.go
package gohome
import("github.com/common-nighthawk/go-figure")
func GoHome() {
figure.NewFigure("Go Home!", "basic", true).Scroll(30000, 400, "right")
}
go-multi-modules
다음과 같이 고쳐 쓰십시오.main.go
package main
import (
"go-multi-modules/pkg/hello-world"
"go-multi-modules/pkg/go-home"
)
func main() {
helloworld.HelloWorld()
gohome.GoHome()
}
위쪽 디렉터리go build
replace
에서 구축하려고 시도하는 중 다음 오류가 발생하여 성공할 수 없습니다.모듈 읽기에 실패한 것 같습니다.$ go build
build go-multi-modules: cannot load go-multi-modules/pkg/go-home: cannot find module providing package go-multi-modules/pkg/go-home
go.mod 덕분에 Go Home 성공했습니다.
해결 방법은 매우 간단하다. 부대
replace
에서 아래replace go-multi-modules/pkg/go-home => ./pkg/go-home
지령을 기술했다.replace
go build
명령을 작성하면 구축이 성공합니다.다음은
go build
후의go.mod
이다.의존 관계 추가require
.go.mod
module go-multi-modules
go 1.12
require (
github.com/common-nighthawk/go-figure v0.0.0-20190529165535-67e0ed34491a
go-multi-modules/pkg/go-home v0.0.0-00010101000000-000000000000
)
replace go-multi-modules/pkg/go-home => ./pkg/go-home //追加
그럼 구축된 후./go-multi-modules
에 실행해 보세요.순식간에 Hello World가 뜨고 Go Home!집행우리는 마침내 완성했다.
왜 다중 모듈화를 원합니까?
그렇다면 지금까지 다모듈화 방법을 알았지만 문제의 원인이 왜 자신이 다종목이 되고 싶은지 설명하지 못했다.
이유는 C 언어 라이브러리cgo를 구축하는 모듈을 썼지만 make로 구축해야 하기 때문에git의 하위 모듈로 로컬로 포획하려면 반드시 다중 모듈 설정이 된다.다만 본가의 흔한 문제 해답 한 데이터 라이브러리에서 하나의 모듈을 추천하기 때문에 일반적으로 다중 모듈을 사용하는 것은 신중한 것이 좋다고 생각한다.
총결산
본고는 Go Modules의'다중 모듈 구성'에 초점을 맞추어 이야기 제작 방식으로 다음과 같은 내용을 설명한다.
본고는 Go Modules의'다중 모듈 구성'에 초점을 맞추어 이야기 제작 방식으로 다음과 같은 내용을 설명한다.
hinastory/go-multi-modules
Contribute to hinastory/go-multi-modules development by creating an account on GitHub.
이 글이 Go Modules를 사용하여 모듈 관리를 시작하는 사람, 다중 모듈에 걸려 넘어진 사람의 참고가 된다면 좋겠다.
참고 문헌
Using Go Modules - The Go Blog ( 일역 )
pkg
디렉토리는 Go Modules를 사용하는 데 필요하지 않지만 여기에서 사용됩니다기본 Go 레이아웃. ↩ Go Home은 단락이므로 부드럽게 통과할 수 있다면 좋겠다. ↩
Reference
이 문제에 관하여(Go Modules 및 다중 모듈 구성을 사용하여 Go Home 구현 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hinastory/items/336c2d944fdb8ae11efb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)