関数をまとめておく機能としてpackageがある。

packageすると、main関数に記載するコード行が小さくなり、コードが読みやすくなるという利点がある上にpackageは再利用できるし、配布もできる。


まずgoフォルダに合わせて右クイックで新規フォルダを作り、名前をつける(今回はryoko。これがpackage名になる)。

次にryokoフォルダに下記のような新規ファイルを作る。


※ryokoフォルダの中のファイルにしたい場合は、ファイル名の前に必ずryoko/を入れること。

ryokoフォルダのファイル名は自由につけてよい(今回はfunc.go)。

出来上がったryoko/func.goにコードを記述する。


package ryoko

func Sum(i int, j int) int {
	var res int
	res = i + j
	return res
}

今回は自作packageなので、package mainやfunc main(){}から記述する必要はない。

※package内では作成する関数名は大文字にする(ここでは、Sumのこと)

上記で記載したコードをmain.goフォルダで実行してみる。


package main

import "./ryoko"

func main() {
	var num1 int
	var num2 int
	num1 = 5
	num2 = 7
	var r int

	r = ryoko.Sum(num1, num2)
	print(r)
}

今まで記載していたfunc main()の上にimport "./ryoko"を追加。これで、goフォルダの内のryokoパッケージを読み込むという意味になる。/をつけて同じ階層に持っていくことが大切。

階層はフォルダやファイル間の並びのことをいい、下記のようになっている。

ここでは、main.goとryokoが同じ、func.goとhoge.goが同じ階層。

go
├── main.go
└── ryoko
    ├── func.go
    └── hoge.go 

最後にr=に同様にryokoというパッケージ名を追加してprintすると結果が表示される。


packageをいくつか分けると重宝する一つの例として、

func.goファイル行ったの足し算を掛け算にしたpackageを作ってみる。

func.goファイルを作ったのと同じ手順で新規でryoko/hoge.goと名付けたファイルを作る。


package ryoko

func Mul(i int, j int) int {
	var res int
	res = i * j
	return res
}

※今回は、Sum→Mul、+→*に変更しただけ。

これをmain.goファイルで同じように読み込んで実行してみると

package main

import "./ryoko"

func main() {
	var num1 int
	var num2 int
	num1 = 5
	num2 = 7
	var r int

	r = ryoko.Mul(num1, num2)
	print(r)
}

ここでは、main.goファイルのSumをMulに変えただけだが、importしてhoge.goファイルを読み込んでくれた。

ryokoファイルにはfunc.goファイルとhoge.goファイルがある訳だが、import "./ryoko"の後に、どちらかのファイル名を指定する必要はない。ryokoフォルダ内のファイルが全て読み込まれ、対象となる関数を拾って処理してくれる。


最後に時間を表示する最初から組み込まれている(build inと呼ぶ)timeのpackageを利用してみる。これはすでにgo言語の開発者が作成してくれたので、main.goファイルで読み込むだけで使用できる。

package main

import (
	"fmt"
	"time"
)

func main() {
	t := time.Now()
	fmt.Println(t)

}

と上記のように時刻が表示される。

※:=は型指定をしながら変数を作った直後に挿入するという意味がある。

例えば var num1 int
    num1 = 5

これを num1:=5と記載でき、コードを短縮できる。

※ただし、可読性が下がるのでコードに慣れてない人は使わない方がよいかも