255
183

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
255
183

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?