前回に引き続き、golangの勉強。versionは1.13.4。
まずはpackageというかライブラリというか、そういうやつ。
たぶん、種類としてはgo言語標準、ローカルで実装したもの、他から取得したもの、くらいになるんじゃなかろうか。
標準ライブラリ
これが標準のものだろう。
下の方にOther packagesがあるが、これはメインのgoには入ってないがプロジェクトの一部ではあるらしい。"net"はstandardにもotherにもあるが、otherはgolang.org/x/net(import "goglang.org/x/net/bpf"など)とのこと。
ローカルの実装
JavaやC#のイメージだと、機能単位でpackageを分けて、あわよくば他でも使えるようにするだろう。
ライブラリと同じようなイメージかもしれん。
他から取得したもの
よく見るのは、これだ。githubなどで公開されているものを使うのだ。
git getとかで取得できていた気がする。
標準のやつは"fmt"で試せたことにして、まずはローカルの実装だろう。
こんな感じで、masao.goというファイルを作った。
local/helloworld/hel/main.go
01: package main 02: 03: import "fmt" 04: 05: func main() { 06: fmt.Printf("Hello, World!\n") 07: //masao.Callme() 08: Callme() 09: }
local/helloworld/hel/masao.go
01: package main 02: 03: import "fmt" 04: 05: //Callme masao 06: func Callme() { 07: fmt.Printf("I'm masao!\n") 08: }
これは、masaoをmainパッケージに置いたので、動いた。
Cなどと違って、別にincludeみたいなことをしなくて良いのだな。
では、masao.goを別パッケージにしたらどうなるかと、masaoというパッケージに変更した。
$ go install local/helloworld/hel
can't load package: package local/helloworld/hel: found packages main (main.go) and masao (masao.go) in /home/xxx/Golang/go/src/local/helloworld/hel
見つからないとかなんとかいう以前に、パッケージにmainとmasaoがあるからダメ、みたいなことを言われた。
Javaだとディレクトリ構成やファイル名がパッケージと関連していたが、golangはどうなんだろうか。
https://golang.org/doc/effective_go.html#package-names
Another convention is that the package name is the base name of its source directory;
ファイル名はいいとして、パッケージ名とディレクトリ構成は関連するのか。
ならば、パッケージ名はmakkeyにしてみよう。
local/helloworld/hel/main.go
01: package main 02: 03: import "fmt" 04: import "local/helloworld/hel/makkey" 05: 06: func main() { 07: fmt.Printf("Hello, World!\n") 08: makkey.Callme() 09: }
local/helloworld/hel/makkey/masao.go
01: package makkey 02: 03: import "fmt" 04: 05: //Callme masao 06: func Callme() { 07: fmt.Printf("I'm masao!\n") 08: }
これはコンパイルできたし、実行できた。
$ go install local/helloworld/hel
$ hel
Hello, World!
I'm masao!
ファイル名は影響しないようだ。
とはいえ、golangは構造体を使ってclassっぽいものを使えたと思うので、それに合わせることになるだろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。