Goでシングルトン実装をしようとしてググってみても思ったような情報が得られなかったので諦めて自分なりの書き方で実装しました。
これはそのメモです。
singleton.go
package singleton
// 外部で好き勝手インスタンス作られたら困るので非公開
type singleton struct {
Property any
}
func (singleton) Method() {
// なにか処理
}
// 元の型のポインタ型をエイリアスとして定義して公開
// 外部でシングルトンインスタンスを引数に指定できるようにするため
// (シングルトンインスタンスはたぶん参照渡ししかしないだろうということでポインタ型にしています)
type Singleton *singleton
// シングルトンインスタンス
var instance Singleton
func GetInstance() Singleton {
if instance == nil {
instance = &singleton{
Property: 初期値,
}
}
return instance
}