昨日『PHPerだが今日初めてGo言語に手を出してみる試み』というタイトルでGoの始め方を書いたが、Goを書き始めたら、あっという間に1ファイルのコードが長くなってきてしまった。長いコードは、関係性に応じてコードを小さな単位に分割したくなってくる。Go言語にはpackageという仕組みが有るので、簡単なpackageを作る方法を説明する。
記事のゴール
- 1ファイルに固まったコードを2ファイルに分割できるようになる
準備
適当にフォルダを作り、
mkdir ~/Desktop/go-package
cd ~/Desktop/go-package/
Goのソースファイルを作って、
touch main.go
好きなエディタで開き、まずは、Hello Worldするコードを書く。
main.go
package main
import "log"
func main() {
foo()
bar()
}
func foo() {
log.Print("Hello world from foo!")
}
func bar() {
log.Print("Hello world from bar!")
}
とにかく実行してみる:
% go run main.go
2013/12/05 14:32:55 Hello world from foo!
2013/12/05 14:32:55 Hello world from bar!
分割してみる
ここでは、この中の foo
関数、bar
関数を別パッケージに切り出すことにする。
パッケージ名は foobar
にします。
まず、foobarパッケージのディレクトリを作る
mkdir foobar
次に、2つの関数を書く場所として foobar.go を作る
touch foobar/foobar.go
ディレクトリ構成はこのようになる:
.
├── foobar
│ └── foobar.go
└── main.go
foobar.go
に2つの関数を移植する。
この際、関数は大文字から始めるようにする。
大文字から始まる関数は外部に公開される。
foobar/foobar.go
package foobar
import "log"
func Foo() {
log.Print("Hello world from foo!")
}
func Bar() {
log.Print("Hello world from bar!")
}
次に、 main.go
を改修する。
- log パッケージは必要なくなったので削る。
- foobarパッケージをimportする。
- foo, barは関数が大文字になったので変える。
main.go
package main
import "./foobar"
func main() {
foobar.Foo()
foobar.Bar()
}
動くか実行してみる。
% go run main.go
2013/12/05 14:33:49 Hello world from foo!
2013/12/05 14:33:49 Hello world from bar!