Ir al contenido

Tipos Enum

PyGo proporciona soporte nativo para tipos enumerados (enum) con validación en tiempo de compilación. Los enums se definen en el DSL .pgo y se transpilan mecánicamente a código Go y Python idiomático.

enum Status:
active
inactive
pending
enum Role:
admin=1
author=2
reader=3
type Status string
const (
StatusActive Status = "active"
StatusInactive Status = "inactive"
StatusPending Status = "pending"
)
type Role int
const (
RoleAdmin Role = 1
RoleAuthor Role = 2
RoleReader Role = 3
)
import enum
class Status(str, enum.Enum):
ACTIVE = "active"
INACTIVE = "inactive"
PENDING = "pending"
class Role(int, enum.Enum):
ADMIN = 1
AUTHOR = 2
READER = 3
enum Status:
active
inactive
model User:
id: UUID
name: String
status: Status
role: Role

Los enums se validan en tiempo de compilación:

model Post:
title: String
status: Status
# Válido
post = Post(title="Hello", status=Status.published)
# Inválido — error de compilación (no es un valor válido de Status)
# post = Post(title="Hello", status="published")

Por defecto, PyGo almacena los enums como su valor de cadena en la base de datos:

CREATE TABLE user (
id UUID PRIMARY KEY,
name TEXT NOT NULL,
status TEXT NOT NULL, -- almacena "active", "inactive", "pending"
role INTEGER -- almacena 1, 2, 3 (para enums numéricos)
);
  • Usa enums respaldados por cadena para valores legibles por humanos
  • Usa enums numéricos para eficiencia de almacenamiento
  • Siempre usa la constante del enum, nunca cadenas crudas