Posted at

Go言語のpackageの作り方: 長くなったコードを別ファイルに切り出す方法

More than 5 years have passed since last update.

昨日『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!