1. ホーム
  2. go

[解決済み] mod initは新しいフォルダを作成しますか? パスの意味は?

2022-03-02 23:47:58

質問

Go言語の経験は3日だけです。私の混乱を理解するために、例題がより適切であることを願っています。

root@freebsd1:/usr/home/arun/go-start/src/test2 # go mod init f1/f2/f3/f4/f5/hello
go: creating new go.mod: module f1/f2/f3/f4/f5/hello
root@freebsd1:/usr/home/arun/go-start/src/test2 #

上記の例では go mod init は、これらのフォルダをすべて作成しています( f1/f2/f3/f4/f5/hello )?. いろいろ検索してみましたが、そのようなフォルダはシステム内に見つかりませんでした。 では、このパスの意味は何なのでしょうか。

このパスがそのままだと下のコマンドは実行されないにもかかわらず

# go install f1/f2/f3/f4/f5/hello

--:EDIT:--

これは、後で誰かの役に立つかもしれません(特に初心者のために、適切な方法でこれを理解するためのステップを歩んでください)。

  1. 電卓というプログラムを作って、あとでGitHubにアップロードする予定です。

  2. のような別のパッケージに関数を入れておくことにします。 sum , multiply その他

  3. ファーストステップ #go mod init github.com/go-arun/calculator ( 混同しないでください。これは、将来的にこのプロジェクトのためにgithubにリポジトリを作成するかもしれないという仮定に過ぎません )

  4. 作成したフォルダ sum (パッケージフォルダの1つ、および作成された sum.go 内部 )

システムで入っているものを見る。

1.

root@debian1:/home/arun/lab# go mod init github.com/go-arun/calculator
go: creating new go.mod: module github.com/go-arun/calculator

root@debian1:/home/arun/lab# cat go.mod
module github.com/go-arun/calculator

go 1.15

2.

root@debian1:/home/arun/lab# cat sum/sum.go
package sum

import "fmt"

func Sum(num1,num2 int)(){
        fmt.Println(num1+num2)

}

3.

root@debian1:/home/arun/lab# cat main.go
package main

import(
        "github.com/go-arun/calculator/sum"
)

func main(){
        n1 := 10
        n2 := 10

        sum.Sum(n1,n2)
}

4.

root@debian1:/home/arun/lab# tree
.
|-- go.mod
|-- main.go
`-- sum
    `-- sum.go

解決方法は?

go mod init を実行しても、これらのフォルダは作成されません。モジュールパス" を go mod init に記録されます。 go.mod ファイルを作成します。

モジュールパスとは、モジュールルートに対応するインポートパスのプレフィックスです。モジュールパスとモジュールルートへの相対パスは、アプリ内で一意でなければならない完全なインポートパスを形成します。

ですから、例えば、あなたのモジュールに foo (そして、パッケージ foo であるパスでインポートされます。 modulepath/foo . あなたの場合は、次のようになります。 f1/f2/f3/f4/f5/hello/foo .

に対して許可されています。 moduleA を含むことができます。 foo パッケージ、また moduleB を持つようにする。 foo パッケージを使用します。使用するときやインポートするときは、最初に moduleA/foo 後者は moduleB/foo というように、どちらをインポートしているのかが曖昧にならないようにするためです。モジュールパスは名前空間のようなものです。

モジュールを公開する予定の、または予定しているリポジトリに対応するモジュールパスを使用することが推奨されているので、その際は。 go get は自動的にあなたのモジュールを取得し、ビルドし、インストールすることができます。たとえば、次のようなモジュールパスを選択します。 github.com/bob/hello そうすれば、あなたのモジュールを公開したとき、誰もが単に import "github.com/bob/hello" をアプリに組み込むことができます。

また、ビルドする前にコードをリモートリポジトリに公開する必要はないことに注意してください。しかし、それでもこのパターンに従うことをお勧めします。そうすれば、将来公開することになったときに、コードを動作させるための作業を少なくすることができます。ここで失うものは何もありません。

詳しくはドキュメントをご覧ください。 コマンドゴー モジュールの定義

また Goコードの書き方。コードの構成