Ir al contenido

Map[K]V

PyGo proporciona soporte de primera clase para tipos de mapa genéricos usando la sintaxis Map[K, V]. Los mapas son type-safe en tiempo de compilación y se transpilan mecánicamente a map[K]V de Go y dict[K, V] de Python de forma idiomática.

model Config:
app_name: String
settings: Map[String, String] # Mapa de claves str a valores str
thresholds: Map[String, Int] # Mapa de claves str a valores int
model User:
name: String
model Team:
name: String
members: Map[String, User] # Mapa de IDs de usuario a objetos User
model MultiTenantConfig:
data: Map[String, Map[String, String]] # Mapa 2D de cadenas

Los mapas se validan en tiempo de compilación:

config = Config(
app_name="MyApp",
settings={"theme": "dark", "lang": "en"},
thresholds={"max_retries": 3, "timeout": 30}
)
# Válido — accediendo a una clave del tipo correcto
theme = config.settings["theme"]
# Inválido — el transpiler lo rechaza en tiempo de compilación
# config.settings[123] # Error: 123 no es String

Go:

type Config struct {
AppName string
Settings map[string]string
Thresholds map[string]int
}

Python:

from typing import Dict
class Config(BaseModel):
app_name: str
settings: Dict[str, str]
thresholds: Dict[str, int]

Los mapas se almacenan en la base de datos de la siguiente manera:

  • SQLite: JSON codificado como TEXT
CREATE TABLE config (
id INTEGER PRIMARY KEY,
app_name TEXT NOT NULL,
settings TEXT, -- JSON: {"theme": "dark", "lang": "en"}
thresholds TEXT -- JSON: {"max_retries": 3, "timeout": 30}
);

PyGo soporta las siguientes operaciones con mapas:

config.settings["theme"] = "light"
theme = config.settings.get("theme", "dark")
del config.settings["theme"]
if "theme" in config.settings:
print(config.settings["theme"])
keys = config.settings.keys() # ["theme", "lang"]
values = config.settings.values() # ["light", "en"]
items = config.settings.items() # [("theme", "light"), ("lang", "en")]

Usa Map[K, V]? para mapas nulos:

model Config:
app_name: String
settings: Map[String, String]? = None # Puede ser NULL
  • Usa Map[String, String] para configuración flexible de clave-valor
  • Usa Map[String, Model] para tablas de búsqueda y colecciones indexadas
  • Usa Map[String, Map[String, V]] con moderación — considera aplanar la estructtura
  • Siempre proporciona mapas vacíos por defecto para evitar problemas con nil/null