2020/02/11

[golang]importやmainの分け方

golangのパスなどについて理解する方法を考えていたのだが、あきらめることにした。
機械的に覚えても困らないだろう。

 

まず、mainパッケージは専用ディレクトリを作って、そこに置く。
推奨構成があったと思うが、cmd/<コマンド名> ディレクトリの下に置くのがいいだろう。

そのディレクトリの中には、そのコマンドに関係するファイルだけを置くのがいいんじゃなかろうか。
src/ex1ディレクトリの下に、ex1.goとex1sub.goを置き、ex1.goはmain、ex1sub.goはpppというパッケージ名にしたのだが、

$ go run .
package ex1: found packages main (ex1.go) and ppp (ex1sub.go) in /home/xxx/golang/src/ex1

などと言われてしまった。

やり方はあるのかもしれんが、ex1sub.goもmainパッケージにすれば済むだけの話なのだ。
私の「あきらめる」というのは、そこら辺はもう考えないで済ませたい、という逃げの戦法なのだ。

 

それはともかく、1つの実行ファイルを作るのにはsrc以下にディレクトリを作り、その中でさらにコマンドを分けたいならcmdディレクトリを作ってその中で分ければいいだろう。

ライブラリのようにまとまった機能を持たせるなら、それはそれでディレクトリを別にして、そのディレクトリ内は同じパッケージ名を使うとよいだろう。
この辺はC#やJavaなどでも同じだろう。


書くことがなくなってしまった(深く欠けるほどの知識がたまってない)ので、goroutineのことでも書いておこう。

まあ、goroutineについても知識がないのだが、OSのスレッド(私はLinux環境なのでpthread)とは別物だ、ということはわかった。
調べてないけど、広義のスレッドではあると思う。

 

volatileのようなキーワードはなさそうだ。
chanというものがあるようだが、まだわかってない。
C/C++のvolatileは「最適化しないでコードで見える形にコンパイルしてねー」というお願い(命令)なので、最適化されるとまずそうなところに使っていくのだけど、golangでは並列実行を言語として組み込んでいるから変に考え込まずに正しく実装すれば済むようになっているのだろう。

最適化による失敗はわかりづらいし、下手するとパフォーマンスを落とすことになるから、言語に組み込まれたことでやりやすくなるのだろう。

一抹の寂しさを感じなくもないが、変なところで失敗しなくて済むという安心感の方が強いな。

0 件のコメント:

コメントを投稿

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