Ir al contenido

Array[T]

PyGo proporciona soporte de primera clase para tipos de arreglo genéricos usando la sintaxis Array[T]. Los arreglos son type-safe en tiempo de compilación y se transpilan mecánicamente a slices de Go y listas de Python de forma idiomática.

model Team:
name: String
members: Array[String] # Arreglo de cadenas
scores: Array[Int] # Arreglo de enteros
model Matrix:
data: Array[Array[Float]] # Matriz 2D de flotantes
model User:
name: String
tags: Array[String]
model Project:
title: String
users: Array[User] # Arreglo de instancias de modelo

Los arreglos se validan en tiempo de compilación:

team = Team(name="Alpha", members=["Alice", "Bob"])
# Válido — todos los elementos son String
team.members = ["Alice", "Bob", "Charlie"]
# Inválido — el transpiler rechaza esto (Int no es String)
# team.members = ["Alice", 42]

Go:

type Team struct {
Name string
Members []string
Scores []int
}

Python:

class Team(BaseModel):
name: str
members: list[str]
scores: list[int]

Los arreglos se almacenan en la base de datos según el motor:

  • SQLite: Codificado en JSON como TEXT
-- SQLite (codificado en JSON)
CREATE TABLE team (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
members TEXT, -- JSON: ["Alice", "Bob", "Charlie"]
scores TEXT -- JSON: [10, 20, 30]
);

PyGo proporciona un conjunto de operaciones que funcionan con arreglos tanto en Go como en Python:

team.members.append("David")
team.members.extend(["Eve", "Frank"])
handler listActiveUsers:
list(team_id: UUID) -> Array[User]:
team = Team.find(team_id)
return team.members.filter(active=True)
count = len(team.members)

Usa Array[T]? para arreglos nulos:

model Team:
name: String
members: Array[String]? = None # Puede ser NULL
  • Usa Array[String] para colecciones de cadenas homogéneas
  • Usa Array[Model] para referencias embebidas a modelos
  • Evita arreglos de arreglos para mejor compatibilidad con la base de datos
  • Usa Array[String]? para arreglos opcionales (pueden ser NULL)