外部から呼ばれる必要がない関数は公開しない
Contents
Do not expose a function externally unless it truly needs to be called from outside. A public function must represent an external interface. (外部から呼ばれる必要がない限り、関数を外部に公開しない。公開関数は外部インターフェースを表現する必要がある)
解説
関数の可視性を必要最小限に抑えることは、カプセル化の原則に基づく重要な設計です。不必要に公開された関数は、意図しない外部からの呼び出しを許し、内部実装の変更を困難にします。公開関数は契約として機能するため、変更時には後方互換性を考慮する必要があります。内部実装の詳細は非公開にすることで、リファクタリングの自由度が高まります。
具体例
// 悪い例
type UserService struct {
db Database
}
// 内部処理なのに公開されている
func (s *UserService) ValidateUserInput(name string) bool {
return len(name) > 0
}
func (s *UserService) CreateUser(name string) error {
if s.ValidateUserInput(name) {
return s.db.Insert(name)
}
return errors.New("invalid input")
}
// 良い例
type UserService struct {
db Database
}
// 内部処理は非公開
func (s *UserService) validateUserInput(name string) bool {
return len(name) > 0
}
// 外部インターフェースのみ公開
func (s *UserService) CreateUser(name string) error {
if s.validateUserInput(name) {
return s.db.Insert(name)
}
return errors.New("invalid input")
}
参考リンク
外部から呼ばれる必要がない関数は公開しない https://www.tricrow.com/core/coding-standard/no-expose-unnecessarily.html

