go-create-enum
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGo Enum Generator
Go 枚举生成器
Generate type-safe Go enums following GO modular architechture conventions.
遵循Go模块化架构规范生成类型安全的Go枚举。
Pattern
规范
Place enums in .
internal/modules/<module>/enum/<name>_enum.goEach enum file contains:
- String constants for each enum value
- Validation map for O(1) lookups
- Enum struct type
- Constructor with validation ()
New<Type>Enum - method
String() - Private validation function ()
validate<Type>
将枚举放置在中。
internal/modules/<module>/enum/<name>_enum.go每个枚举文件包含:
- 每个枚举值的字符串常量
- 用于O(1)查找的验证映射
- 枚举结构体类型
- 带验证的构造函数()
New<Type>Enum - 方法
String() - 私有验证函数()
validate<Type>
Example Structure
示例结构
For an enum named "ContactType" with values "email" and "webhook":
go
package enum
import "github.com/cristiano-pacheco/pingo/internal/modules/monitor/errs"
const (
ContactTypeEmail = "email"
ContactTypeWebhook = "webhook"
)
var validContactTypes = map[string]struct{}{
ContactTypeEmail: {},
ContactTypeWebhook: {},
}
type ContactTypeEnum struct {
value string
}
func NewContactTypeEnum(value string) (ContactTypeEnum, error) {
if err := validateContactType(value); err != nil {
return ContactTypeEnum{}, err
}
return ContactTypeEnum{value: value}, nil
}
func (e ContactTypeEnum) String() string {
return e.value
}
func validateContactType(contactType string) error {
if _, ok := validContactTypes[contactType]; !ok {
return errs.ErrInvalidContactType
}
return nil
}对于名为"ContactType"、值为"email"和"webhook"的枚举:
go
package enum
import "github.com/cristiano-pacheco/pingo/internal/modules/monitor/errs"
const (
ContactTypeEmail = "email"
ContactTypeWebhook = "webhook"
)
var validContactTypes = map[string]struct{}{
ContactTypeEmail: {},
ContactTypeWebhook: {},
}
type ContactTypeEnum struct {
value string
}
func NewContactTypeEnum(value string) (ContactTypeEnum, error) {
if err := validateContactType(value); err != nil {
return ContactTypeEnum{}, err
}
return ContactTypeEnum{value: value}, nil
}
func (e ContactTypeEnum) String() string {
return e.value
}
func validateContactType(contactType string) error {
if _, ok := validContactTypes[contactType]; !ok {
return errs.ErrInvalidContactType
}
return nil
}Generation Steps
生成步骤
-
Identify enum details:
- Enum name (e.g., "ContactType", "Status", "Priority")
- Possible values (e.g., ["email", "webhook"], ["active", "inactive"])
- Target module (e.g., "monitor", "auth")
-
Create error constant:
- Add error to
internal/modules/<module>/errs/errs.go - Format:
ErrInvalid<EnumName> = errors.New("invalid <enum_name>") - Example:
ErrInvalidContactType = errors.New("invalid contact type")
- Add error to
-
Generate enum file:
- Filename:
<snake_case_enum_name>_enum.go - Package:
enum - Import module errs package
- Follow structure above with all components
- Filename:
-
识别枚举细节:
- 枚举名称(例如:"ContactType"、"Status"、"Priority")
- 可能的值(例如:["email", "webhook"]、["active", "inactive"])
- 目标模块(例如:"monitor"、"auth")
-
创建错误常量:
- 将错误添加到
internal/modules/<module>/errs/errs.go - 格式:
ErrInvalid<EnumName> = errors.New("invalid <enum_name>") - 示例:
ErrInvalidContactType = errors.New("invalid contact type")
- 将错误添加到
-
生成枚举文件:
- 文件名:
<snake_case_enum_name>_enum.go - 包名:
enum - 导入模块的errs包
- 遵循上述所有组件的结构
- 文件名:
Naming Conventions
命名规范
- File: (e.g.,
<snake_case>_enum.go)contact_type_enum.go - Constants: (e.g.,
<EnumName><Value>)ContactTypeEmail - Validation map: (lowercase, plural)
valid<EnumName>s - Struct: (e.g.,
<EnumName>Enum)ContactTypeEnum - Constructor:
New<EnumName>Enum - Validator: (private, singular, takes string param)
validate<EnumName> - Error: in module's
ErrInvalid<EnumName>packageerrs
- 文件:(例如:
<snake_case>_enum.go)contact_type_enum.go - 常量:(例如:
<EnumName><Value>)ContactTypeEmail - 验证映射:(小写、复数)
valid<EnumName>s - 结构体:(例如:
<EnumName>Enum)ContactTypeEnum - 构造函数:
New<EnumName>Enum - 验证器:(私有、单数、接收字符串参数)
validate<EnumName> - 错误:模块包中的
errsErrInvalid<EnumName>
Implementation Checklist
实现检查清单
- Add to
ErrInvalid<EnumName>internal/modules/<module>/errs/errors.go - Create
internal/modules/<module>/enum/<name>_enum.go - Define all constant values
- Create validation map with all values
- Define enum struct type (private field)
value string - Implement constructor
New<EnumName>Enum(value string) (<EnumName>Enum, error) - Implement method
String() string - Implement private function
validate<EnumName>(value string) error
- 向添加
internal/modules/<module>/errs/errors.goErrInvalid<EnumName> - 创建
internal/modules/<module>/enum/<name>_enum.go - 定义所有常量值
- 创建包含所有值的验证映射
- 定义枚举结构体类型(私有字段)
value string - 实现构造函数
New<EnumName>Enum(value string) (<EnumName>Enum, error) - 实现方法
String() string - 实现私有函数
validate<EnumName>(value string) error
Usage Pattern
使用模式
Other code creates enums via the constructor (validation happens internally):
go
// Create typed enum (validation is automatic)
contactType, err := enum.NewContactTypeEnum(input)
if err != nil {
return err
}
fmt.Println(contactType.String()) // "email"
// Use constants directly when value is known at compile time
const defaultType = enum.ContactTypeEmail其他代码通过构造函数创建枚举(验证在内部完成):
go
// 创建类型化枚举(自动验证)
contactType, err := enum.NewContactTypeEnum(input)
if err != nil {
return err
}
fmt.Println(contactType.String()) // "email"
// 当编译时已知值时直接使用常量
const defaultType = enum.ContactTypeEmail