Go言語学習その36~パッケージその1

Java にも存在するパッケージが Go にもあるようです。
Go におけるパッケージがどういうものか見てみます。


■ すべてのソースはパッケージ内にある

以下は文字を出力するだけの単純なサンプルです。

package main

import "fmt"

func main() {
	fmt.Println("文字出力")
}

まず、以下の行でソースコードが属するパッケージ名を指定しています。

package main

main パッケージに所属しているコードであることを宣言しています。
Go ではソースコードは必ず何らかのパッケージに所属させないといけないようです。
これは Java でも同じですね。

※ Java では package 宣言を省略できますが、
  省略していても、デフォルトパッケージ(無名パッケージ)に
  所属しているという扱いになります

■ main パッケージから始める

先ほどのサンプルのパッケージ宣言を
package main
ではなく
package sample
に変えてみます。

package sample

import "fmt"

func main() {
	fmt.Println("文字出力")
}

実行してみたらおこられました。

package command-line-arguments is not a main package

Go ではプログラムは main パッケージから始まる仕様になっているようで
必ず main パッケージが存在しないといけないようですね。

■ main 関数から始まる

今度は、
・パッケージは main
・実行する関数名は sample
にして実行してみました。

package main

import "fmt"

func sample() {
	fmt.Println("文字出力")
}

おこられました。

# command-line-arguments
runtime.main_main・f: function main is undeclared in the main package

Go は main パッケージから処理が始まる仕様ですが、
さらに必ず main 関数が存在しないといけないようですね。
main パッケージの main 関数から処理が始まるってことのようです。

■ デフォルトパッケージ(無名パッケージ)はあるの?

Java では package 宣言を省略すると、
ソースコードはデフォルトパッケージ(無名パッケージ)に
所属しているという扱いになりますが
Go の場合はどうでしょうか?

ためしに package 宣言を削除してみました。

import "fmt"

func main() {
	fmt.Println("文字出力")
}

実行したらおこられました。

pkg03.go:1:1: expected 'package', found 'import'
※ 「pkg03.go」はサンプルソースファイル名

どうやら package 宣言は省略できないようです。
ということは、Java でいうところの
「デフォルトパッケージ(無名パッケージ)」
は Go では無いってことなんでしょうね。

まあ、Java でも実務において
デフォルトパッケージ(無名パッケージ)
使うことは今までの経験上無かったので
Java でも package 宣言省略できないようにしてもいいかもですね。

次回も引き続きパッケージまわりを見ていきます。

#プログラミング
#IT
#プログラミング言語
#Go言語
#GO
#Golang

いいなと思ったら応援しよう!