
go语言接口和实现命名规范探讨
在go语言中,接口和其实现的命名规范到底如何定义?
对于依赖于接口的web项目,如userservice示例,建议采用如下命名方式:
接口以大写字母开头,实现以小写字母开头
立即学习“go语言免费学习笔记(深入)”;
type UserService interface {
SignupByEmail(ctx *gin.Context, user domain.User) error
LoginByEmail(ctx *gin.Context, user domain.User) (domain.User, error)
}
type userService struct {
userRepo repo.UserRepository
}
func newUserService(userRepo repo.UserRepository) *userService {
return &userService{userRepo: userRepo}
}接口以"er"或"able"结尾
对于接口,更推荐使用以"er"或"able"结尾的命名约定,例如:
- reader
- writer
- marshaler
这有助于清楚地表明该接口定义的操作类型。
实现以"impl"结尾
对于实现,建议使用"impl"作为后缀,例如:
- userserviceimp
- repositoryimp
对于存储库和dao,可以采用相似的命名模式:
存储库
- 接口:userdao
- 实现:usermysqldao
缓存
- 接口:cache
- 实现:rediscache
通过遵循这些命名规范,可以提升代码的可读性和可维护性,并与go语言的最佳实践保持一致。










