2020/02/24

[golang]パッケージ名? ディレクトリ名?

以前、こんな記事を書いた。

hiro99ma blog: [golang]go runの引数はなんなのか
https://hiro99ma.blogspot.com/2020/02/golanggo-run.html

とりあえずmainパッケージを含んでいるディレクトリを指定しておけばいいんじゃないか、くらいで終わった。

 

そういえばimportなんかは基本的にsrc以下からのパスで書いていたはずだ。
import "github.com/hirokuma/gogo/cmd"、とか。
mainパッケージを含んでいるディレクトリを書くということであれば、cmdディレクトリの中がmainパッケージになっていて、どれかのgoファイルの中にmain()があるんだろう。

いつも「mainパッケージ」と呼んでいるが、よく考えれば正式な名前は「github.com/hirokuma/gogo/cmd/mainパッケージ」なのだろうか?

 

runの引数は実行できれば良かったのだが、importとなるとまた話が変わってくることに気付いたのだった。


ここを見よう。

How to Write Go Code - The Go Programming Language
https://golang.org/doc/code.html

読む前の注意点。

This document assumes that you are using Go 1.13 or later and the GO111MODULE environment variable is not set

1.13より古い場合はアーカイブ参照だ。
ページの最終更新日が書いてあると助かるのだが、載ってなさそうだ。
google検索からすると、2020年1月13日みたいだ。

 

翻訳するなら自動でもよさそうなので、気がついたところだけ抜粋しよう。

  • パッケージ、リポジトリ、モジュール
    • たぶん、ファイル単体を別とすれば、パッケージが最小単位
    • リポジトリは1つ以上のモジュールを含む
      • 通常、リポジトリのルートにある1つのモジュールが含まれる
      • go.modとディレクトリのことが書いてあるが、なんか分かりづらいぞ。。
    • モジュールは関連するパッケージの集合
  • A package is a collection of source files in the same directory that are compiled together.
    • パッケージの単位は同一ディレクトリなのね。
  • Each module's path not only serves as an import path prefix for its packages, but also indicates where the go command should look to download it.
    • import pathってことは、importに書いているあれはパスの方なのね。
  • An import path is a string used to import a package. A package's import path is its module path joined with its subdirectory within the module.
    • import pathは、パスといっても純粋なディレクトリじゃなくて、ディレクトリ構造+パッケージ名、なのか

 

よし、なんとなくわかった!
わかったんじゃないだろうか。。。

いろいろコードの書き方に抜け道(コンパイルエラーにならず上記の書き方にしない方法)はあるのだろうが、上記の書き方をしておけば悪くないということだ。

C言語の時は使用期間が長いこともあり、自分でなんとなくルールを決めていった。
Java言語ではディレクトリ構成も含めてきっちり決められていたので、その通りにやりつつも自由度がないなあ、と思った。
その中間くらいなのかな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。