これはなに
この記事では、Goにおけるパッケージ内でプライベートな関数を定義する方法について説明します。Go言語では、関数名を小文字で始めることで、その関数をプライベートにし、パッケージの外部からのアクセスを防ぐことができます。これにより、パッケージ内部の実装を隠蔽し、安全性やカプセル化を高めることができます。
対象読者
- Go言語を使ってプログラムを開発しているエンジニア
- Goでの関数の可視性について学びたい初心者
- パッケージ設計やセキュリティに興味があるプログラマ
ゴール
- Goにおけるプライベート関数の定義方法を理解する
- プライベート関数とパブリック関数の違いを明確にする
- パッケージ内での関数のアクセス制御の方法を学ぶ
TL;DR
- 関数名を小文字で始めると、Goではその関数がプライベートになり、パッケージ外からはアクセスできなくなります
- 関数名を大文字で始めると、その関数はパッケージ外からもアクセス可能なパブリック関数になります
プライベート関数の定義方法
プライベートな関数の定義
プライベートな関数は、次のように関数名を小文字で始めて定義します。
package mypackage
import "fmt"
// プライベート関数
func privateFunction() {
fmt.Println("This is a private function")
}
// パブリック関数
func PublicFunction() {
fmt.Println("This is a public function")
privateFunction() // 同じパッケージ内でプライベート関数を呼び出す
}
使用例
次に、パッケージ内でプライベートな関数を定義し、それを使用する例を示します。
ファイル構成
mypackage/
└── mypackage.go
main.go
mypackage/mypackage.go
package mypackage
import "fmt"
// プライベート関数
func privateFunction() {
fmt.Println("This is a private function")
}
// パブリック関数
func PublicFunction() {
fmt.Println("This is a public function")
privateFunction() // 同じパッケージ内でプライベート関数を呼び出す
}
main.go
package main
import "mypackage"
func main() {
mypackage.PublicFunction() // パブリック関数の呼び出しは可能
// mypackage.privateFunction() // エラー: プライベート関数は他のパッケージから呼び出せない
}
実行結果
This is a public function
This is a private function
説明
mypackage.go
-
privateFunction
は小文字で始まるため、この関数はmypackage
パッケージ内からのみアクセス可能です -
PublicFunction
は大文字で始まるため、この関数は他のパッケージからもアクセス可能です -
PublicFunction
内でprivateFunction
を呼び出しています
main.go
-
mypackage.PublicFunction()
を呼び出すことができますが、mypackage.privateFunction()
を直接呼び出そうとするとエラーになります。プライベート関数は他のパッケージからアクセスできないためです
このように、関数名を小文字で始めることで、その関数をプライベートにしてパッケージの外部からのアクセスを防ぐことができます。