Communitygithub.com

JantonioFC/skillsbank

Guías de código super-específicas para Go, enfocadas en eficiencia y buenas prácticas idiomáticas.

¿Qué es skillsbank?

Este skill proporciona una referencia detallada de estilo y eficiencia para el lenguaje de programación Go. Cubre desde el manejo de errores y el uso de slices y mapas, hasta patrones de concurrencia con gorutinas y canales, diseño de structs e interfaces, y funciones con closures. Además, incluye una sección de anti-patrones comunes en Go, como el uso de panic para errores esperados o la captura incorrecta de variables de bucle en closures. Está diseñado para desarrolladores que ya conocen Go y buscan escribir código más idiomático, eficiente y mantenible, apoyándose en ejemplos concretos de código "malo" y "bueno". El skill se integra en herramientas de IA como agentes de codificación (Claude Code, Cursor, Codex, etc.) para guiar la generación y revisión de código Go.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JantonioFC/skillsbank/tree/HEAD/skills/go

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Go: Referencia de Eficiencia Idiomática

Tabla de Contenidos

  1. Manejo de Errores
  2. Slices y Mapas
  3. Gorutinas y Canales
  4. Structs e Interfaces
  5. Funciones y Closures
  6. Anti-patrones específicos de Go

1. Manejo de Errores {#errores}

// ❌ Ignorar errores
result, _ := os.Open(path)

// ✅ — siempre manejar; usar _ solo cuando el error es irrelevante de manera comprobable
result, err := os.Open(path)
if err != nil {
    return fmt.Errorf("open %s: %w", path, err)
}
// ❌ Variable de error redundante
err := doA()
if err != nil { return err }
err = doB()
if err != nil { return err }

// ✅ — cada :=/: está bien; esto es Go idiomático. No intentes "arreglarlo".
// Lo que SÍ puedes simplificar: colapsar en una línea cuando el cuerpo del if es un solo return
if err := doA(); err != nil { return err }
if err := doB(); err != nil { return err }
// ❌ Tipo de error personalizado sin valor añadido
type MyError struct{ msg string }
func (e MyError) Error() string { return e.msg }

// ✅ — usar errors.New o fmt.Errorf a menos que los llamadores necesiten inspeccionar el tipo
var ErrNotFound = errors.New("not found")
return fmt.Errorf("lookup %q: %w", key, ErrNotFound)

Envuelve los errores con %w (no %v) para que los llamadores puedan usar errors.Is / errors.As.


2. Slices y Mapas {#slices}

// ❌ Crecer un slice sin preasignación cuando se conoce el tamaño
var result []string
for _, item := range items {
    result = append(result, item.Name)
}

// ✅
result := make([]string, 0, len(items))
for _, item := range items {
    result = append(result, item.Name)
}
// ❌ Verificación manual de existencia antes de escribir en el mapa
if _, ok := m[key]; !ok {
    m[key] = []string{}
}
m[key] = append(m[key], value)

// ✅ — agregar a un slice nil es válido en Go
m[key] = append(m[key], value)
// ❌ Copiar un mapa por asignación (copia la referencia)
copia := original

// ✅
copia := make(map[K]V, len(original))
for k, v := range original { copia[k] = v }

3. Gorutinas y Canales {#concurrencia}

// ❌ Gorutina de lanzar y olvidar sin ciclo de vida
go doWork()

// ✅ — usar errgroup o WaitGroup para rastrear la finalización
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    doWork()
}()
wg.Wait()
// ❌ Canal sin buffer que causa bloqueo innecesario de gorutina
ch := make(chan Result)
go func() { ch <- compute() }()
result := <-ch

// ✅ — para un solo resultado, un canal con buffer evita fugas de gorutina si el receptor sale temprano
ch := make(chan Result, 1)
go func() { ch <- compute() }()
result := <-ch
// ❌ select con default de espera activa
for {
    select {
    case v := <-ch:
        process(v)
    default:
        // girar
    }
}

// ✅ — select bloqueante a menos que realmente necesites no bloqueo
for v := range ch {
    process(v)
}

Usa golang.org/x/sync/errgroup para fan-out con recolección de errores.


4. Structs e Interfaces {#structs}

// ❌ Interfaz grande
type Storage interface {
    Get(key string) ([]byte, error)
    Set(key string, val []byte) error
    Delete(key string) error
    List(prefix string) ([]string, error)
    // ... 10 métodos más
}

// ✅ — interfaces pequeñas y componibles
type Getter interface { Get(key string) ([]byte, error) }
type Setter interface { Set(key string, val []byte) error }
type Storage interface { Getter; Setter }
// ❌ Devolver struct concreto desde el constructor (vincula a los llamadores a la implementación)
func NewStore() *RedisStore { ... }

// ✅ — devolver interfaz cuando tienes o anticipas múltiples implementaciones
func NewStore() Storage { return &RedisStore{...} }
// ❌ Receptor de puntero para tipos de valor pequeños
func (p *Point) X() float64 { return p.x }

// ✅ — receptor de valor para tipos inmutables pequeños
func (p Point) X() float64 { return p.x }

Regla: receptor de puntero cuando el método muta el estado O el struct es grande (>3 campos de tamaño no trivial). Receptor de valor en caso contrario.


5. Funciones y Closures {#funciones}

// ❌ Valores de retorno nombrados usados solo para evitar una declaración de variable
func divide(a, b float64) (result float64, err error) {
    result = a / b
    return
}

// ✅ — los retornos nombrados valen la pena solo para mutación diferida o documentación
func divide(a, b float64) (float64, error) {
    if b == 0 { return 0, errors.New("division by zero") }
    return a / b, nil
}
// ❌ Closure capturando variable de bucle (error clásico de Go, corregido en Go 1.22+)
// Pre-1.22: cada gorutina captura la misma i
for i := 0; i < n; i++ {
    go func() { use(i) }()
}

// ✅ (Go <1.22 — pasar como parámetro)
for i := 0; i < n; i++ {
    go func(i int) { use(i) }(i)
}
// Go 1.22+: la variable de bucle tiene ámbito por iteración, así que la original es segura

6. Anti-patrones específicos de Go {#antipatrones}

Anti-patrónPreferido
if err != nil { return err } repetido 5+ vecesaceptable — es Go idiomático
panic para errores esperadosreturn err
init() con efectos secundariosinicialización explícita en main o constructores
interface{} / any sin genéricosusar genéricos (Go 1.18+) o interfaces tipadas
Campo Mutex no adyacente a los datos que protegeponer mu directamente encima del campo que protege
Canal de canalesgeneralmente señal de sobreingeniería; rediseñar
time.Sleep en pruebasusar hooks de testing o canales para sincronización
Tipos exportados con campos no exportados (cuando los campos son el objetivo principal)structs estilo record con todos los campos exportados
log.Fatal fuera de maindevolver errores hacia arriba en la pila

Limitaciones

  • Estas son guías específicas del lenguaje y no cubren decisiones arquitectónicas generales.
  • La sobrecompresión puede reducir la legibilidad; aplicar criterio.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

JantonioFC/skillsbank

AI-powered image editing with style transfer and object removal

JantonioFC/skillsbank

Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.

JantonioFC/skillsbank

Analise e auditoria de editais de leilao judicial e extrajudicial. Riscos ocultos, clausulas perigosas, debitos, ocupante e classificacao da oportunidade.

JantonioFC/skillsbank

Embed Photopea in web apps using photopea.js. Covers embedding, file I/O, scripting, exporting, layers, text, filters, and the full Photoshop-compatible API.

JantonioFC/skillsbank

Best practices for Remotion - Video creation in React

JantonioFC/skillsbank

Generate walkthrough videos from Stitch projects using Remotion with smooth transitions, zooming, and text overlays

JantonioFC/skillsbank

Seek and analyze video content using Memories.ai Large Visual Memory Model for persistent video intelligence

JantonioFC/skillsbank

Writes complete, structured landing pages optimized for SEO ranking, AEO citation, and visitor conversion. Activate when the user wants to write or generate a landing page for a product, service, or offer.

JantonioFC/skillsbank

Video and audio perception, indexing, and editing. Ingest files/URLs/live streams, build visual/spoken indexes, search with timestamps, edit timelines, add overlays/subtitles, generate media, and create real-time alerts.

JantonioFC/skillsbank

Upload, stream, search, edit, transcribe, and generate AI video and audio using the VideoDB SDK.

JantonioFC/skillsbank

Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory.

JantonioFC/skillsbank

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities.

JantonioFC/skillsbank

Tool lifecycle UI components for React/Next.js from ui.inference.sh. Display tool calls: pending, progress, approval required, results. Capabilities: tool status, progress indicators, approval flows, results display. Use for: showing agent tool calls, human-in-the-loop approvals, tool output. Triggers: tool ui, tool calls, tool status, tool approval, tool results, agent tools, mcp tools ui, function calling ui, tool lifecycle, tool pending

JantonioFC/skillsbank

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

JantonioFC/skillsbank

When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,'...

JantonioFC/skillsbank

Create AI avatar and talking head videos with OmniHuman, Fabric, PixVerse via inference.sh CLI. Models: OmniHuman 1.5, OmniHuman 1.0, Fabric 1.0, PixVerse Lipsync. Capabilities: audio-driven avatars, lipsync videos, talking head generation, virtual presenters. Use for: AI presenters, expla...

JantonioFC/skillsbank

Create AI marketing videos for ads, promos, product launches, and brand content. Models: Veo, Seedance, Wan, FLUX for visuals, Kokoro for voiceover. Types: product demos, testimonials, explainers, social ads, brand videos. Use for: Facebook ads, YouTube ads, product launches, brand awarene...

JantonioFC/skillsbank

Generate AI videos with Google Veo, Seedance, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 1.5 Pro, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, lipsync, avatar animation, video upscaling, fole...

JantonioFC/skillsbank

Production-ready CI/CD configurations for Playwright — GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Docker, parallel sharding, reporting, code coverage, and global setup/teardown.

JantonioFC/skillsbank

You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message.

Skills relacionados