Goにおけるフォルダ(パッケージ)分け
Go言語の勉強を始めたので、基本のメモ。
環境
Go 1.12
フォルダ分け
Goはmain関数があるmainパッケージが処理の拠点として存在するが、 処理を切り分けたい場合はパッケージを作る。 以下の内容が書かれた、「main.go」というファイルがあるとする
package main import ( "fmt" ) func main() { fmt.Println("hello world") }
これをあえて以下のように切り分けたい場合
/prj ┣ main.go ┗ /print/print.go
print.goは以下のようにする
package print import ( "fmt" ) func PrintHello(){ fmt.Println("hello world") }
main.goは以下のように書き換える
package main import ( "print" ) func main() { print.PrintHello() }
こちらのmain.goを実行すると最初に書いたmain.goと同じ動きをする。
fmtはprint側で呼び出して使っているため、importの必要がなくなる。
また、printとpackageに指定したprint.goを呼び出すときは、
importを使って呼び出す。
そうすると、「PrintHello」のように最初が大文字で設定してある関数はパブリックなため、
「パッケージ名.関数名」で呼び出すことができる。
その他
import( . "print" )
上記のように「.」をimportするパッケージ前につけると、print.PrintHello()みたいにパッケージ名を前につけないで呼び出すこともできる。 「.」の代わりに「pri」とかつけてパッケージ名を指定のものに変えることもできる。
ネストしてるパッケージ
/prj ┣ main.go ┗ /print/printutil/print.go
上記のような階層にした場合は、
import ( "print/printutil" ) main(){ printutil.PrintHello() }
上記のように呼び出す、print.goのパッケージ名はこの場合は「printutil」とする。