技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

packageとファイル【Go】

packageとは

Golにおけるpackageは、名前空間を分けるための仕組みです。
各package内に宣言された変数や関数は、そのpackageのメンバと言います。

package pacA

func FuncA() {
    fmt.Println("bazz")
}

上記で言えば、FuncA()はpacAのメンバになります。
packageは名前空間ですので、importすることで
他のファイルから、pacA.FuncA()の形で参照することができます。

package pacB

import "pacA"

func FuncB() {
    pacA.FuncA()
}


注意点

  • main packageが必須
    main packageはそのプロジェクトのエントリポイントとなります。 実行ファイルを生成するために、main packageを指定し、 そのプライベートメンバとしてmain関数を指定する必要があります。

  • パブリックメンバ、プライベートメンバ
    頭文字が大文字のメンバはパブリックメンバとなり、他packageから参照できます。 頭文字が小文字のメンバはプライベートメンバとなり、他packageから参照できません。

  • 循環参照
    互いのファイルでimportをすると循環参照によりエラーとなります。

  • 1フォルダ1package
    各階層には1つのpackage名のみ指定することができます。 ただし、package名に「_test」を指定すれば、異なるpackage名を指定できます。

  • 異なる階層の同名package参照
    異なる階層にある同名のpackageを参照する場合、 import時にそれぞれ異なる別名を指定する必要があります。

    テクニック

  • 参照時の別名指定
    import xxx "pacA" とすることで、xxxを別名として指定することができます。

  • package名の省略
    import . "pacA" とすることで、パッケージ名を指定せずに、FuncA()と記述することができます。

  • import時の階層指定
    1フォルダ1packageのルールがあるため、階層を指定してpackageを参照することができます。