0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【A tour of go】Goのパッケージとエクスポートの仕組みをやさしく解説!

Posted at

先日、Go言語のインターンに参加する機会がありました。そのため、その復習も兼ねて、Go公式チュートリアルの「A Tour of Go」に取り組んでいます。

今回はその中でも「Basics:variables, and functions」の章を進める中で、特にエクスポートのルールやパッケージの仕組みについて、分かりにくいと感じた部分を中心にまとめました。

間違いや勘違いがあればぜひコメントで教えていただけると嬉しいです🙇
Go初学者の方の参考になれば幸いです!

Export names (3/17ページ)

Goでは、大文字で始まる名前(関数・変数・構造体など)は「エクスポート」され、他のパッケージから参照できます
逆に、小文字で始まる名前はパッケージ内でしか使えません

パッケージとは?

パッケージとは、関連する機能をまとめたGoの「ファイルの集まり」のことです。
例えば以下のような構成の時は

application/
├── main.go        ← package main に含まれるファイル
├── model/
│   └── user.go    ← package model に含まれるファイル
└── handler/
    └── user.go    ← package handler に含まれるファイル

model/user.go から handler/user.go 内に含まれる関数/変数を使いたいときは、 model/user.go 内に以下のように import 文を書きます。

import "application/handler"

「エクスポートされた名前」は別のパッケージから使える

Goでは、次のようなルールがあります:

  • Hoge のように 大文字で始まる名前 → 外部パッケージからアクセス可能
    これをPublicと言います。
  • huga のように 小文字で始まる名前 → 外部パッケージからアクセス不可
    これをPrivateと言います。

つまり、handler パッケージ内に以下のような関数があった場合:

// エクスポートされる = Public
func Hoge() {
    ...
}

// エクスポートされない = Private
func huga() {
    ...
}

model/user.go からは Hoge() は呼び出せますが、huga() は呼び出せません。
つまり、handler パッケージ内で定義された関数のうち、大文字で始まる Hoge は外部から見える(使える)のに対し、小文字で始まる huga は見えない(使えない)という違いがあります。
変数、構造体、構造体のフィールド、定数にも同じルールが適用されています。

標準パッケージのmathを使う例

package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Pi) 
}

標準パッケージの math をインポートすると、そこに含まれる Public変数のPi(円周率)を自分のファイル内でも使うことができます。

📦 パッケージをまたぐときは、大文字で始まる「エクスポート名」だけが使えます

📂 同じパッケージ内のファイル同士では、大文字・小文字に関係なくアクセスできます

🚫 他パッケージの小文字始まりの名前にはアクセスできません

引用元 https://go-tour-jp.appspot.com/basics/1

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?