Map[K]V
Map[K]V
Sección titulada «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.
Uso Básico
Sección titulada «Uso Básico»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 intValores de Modelo
Sección titulada «Valores de Modelo»model User: name: String
model Team: name: String members: Map[String, User] # Mapa de IDs de usuario a objetos UserMapas Anidados
Sección titulada «Mapas Anidados»model MultiTenantConfig: data: Map[String, Map[String, String]] # Mapa 2D de cadenasSeguridad de Tipos
Sección titulada «Seguridad de Tipos»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 correctotheme = config.settings["theme"]
# Inválido — el transpiler lo rechaza en tiempo de compilación# config.settings[123] # Error: 123 no es StringCódigo Generado
Sección titulada «Código Generado»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]Representación en Base de Datos
Sección titulada «Representación en Base de Datos»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});Operaciones con Mapas
Sección titulada «Operaciones con Mapas»PyGo soporta las siguientes operaciones con mapas:
Insertar/Actualizar
Sección titulada «Insertar/Actualizar»config.settings["theme"] = "light"Obtener con Valor por Defecto
Sección titulada «Obtener con Valor por Defecto»theme = config.settings.get("theme", "dark")Eliminar (Delete)
Sección titulada «Eliminar (Delete)»del config.settings["theme"]Contener (Contains Check)
Sección titulada «Contener (Contains Check)»if "theme" in config.settings: print(config.settings["theme"])Claves / Valores / Elementos
Sección titulada «Claves / Valores / Elementos»keys = config.settings.keys() # ["theme", "lang"]values = config.settings.values() # ["light", "en"]items = config.settings.items() # [("theme", "light"), ("lang", "en")]Mapas Nulos
Sección titulada «Mapas Nulos»Usa Map[K, V]? para mapas nulos:
model Config: app_name: String settings: Map[String, String]? = None # Puede ser NULLMejores Prácticas
Sección titulada «Mejores Prácticas»- 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