Go Modules 및 다중 모듈 구성을 사용하여 Go Home 구현 방법

12385 단어 Go
Go Modules에서 다중 모듈을 사용하는 방법을 몰라서 조사했습니다.시작은 go.mod의 다른 모듈의 가방일 뿐입니다. 가져오려고 해도 안 됩니다.따라서 Go Modules에서 다중 모듈을 구현하는 방안을 설명하고 싶습니다.
(본 보도는 내 블로그에서 전재된 보도입니다.)

TL;DR

  • Go Modules 편리하니 사용하세요
  • Go Modules가 다중 모듈을 구성할 때 go.mod 파일에서 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.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-modulespkg 에서 실행하고 같은 방식으로 인사하면 성공합니다.

    홈 페이지로 이동하지 못했습니다.


    그럼 인사도 끝났으니 이제 별일 없겠네.집에 가고 싶어요.하지만 귀가 시간 전에 세세하게 관리되고 싶지 않아 다른 모듈로 관리하는 것을 고려하고 있다.이 경우 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 buildreplace에서 구축하려고 시도하는 중 다음 오류가 발생하여 성공할 수 없습니다.모듈 읽기에 실패한 것 같습니다.
    $ 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를 사용하여 의존도 관리 방법
  • 패키지 호출 방법
  • 다중 모듈 구조의 방법
  • 그러나 쉽게 다중 모듈 구조를 형성하지 않는 것이 좋다
  • Go Home! 메서드
  • 또 이 글을 쓰기 위해 만든 코드는 아래에 놓았다.

    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  ( 일역 )
  • Modules · golang/go Wiki
  • Go Modules 개요 및 Go1.12에 포함된 Modules 변경 내용 #golangjp #go112 party-My External Store
  • Go Modules
  • pkg 디렉토리는 Go Modules를 사용하는 데 필요하지 않지만 여기에서 사용됩니다기본 Go 레이아웃
    Go Home은 단락이므로 부드럽게 통과할 수 있다면 좋겠다. 

    좋은 웹페이지 즐겨찾기