Communitygithub.com

JantonioFC/skillsbank

Diretrizes de código super específicas para Go.

O que é skillsbank?

Este skill fornece um conjunto de diretrizes idiomáticas e eficientes para a linguagem de programação Go, cobrindo desde tratamento de erros até concorrência. É útil para desenvolvedores que desejam escrever código Go mais limpo, seguro e performático, evitando armadilhas comuns. O skill aborda tópicos como slices e maps, goroutines e canais, structs e interfaces, funções e closures, além de antipadrões específicos do Go. Através de exemplos de código contra e a favor, ele ensina as melhores práticas da comunidade, como o uso de `%w` para empacotar erros, pré-alocação de slices, e o uso de interfaces pequenas e composíveis. Também destaca mudanças importantes como o comportamento de variáveis de loop em Go 1.22+. O conteúdo é apresentado em formato de referência rápida com tabelas e blocos de código, facilitando a consulta durante o desenvolvimento.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Go: Referência de Eficiência Idiomática

Índice

  1. Tratamento de Erros
  2. Slices & Maps
  3. Goroutines & Canais
  4. Structs & Interfaces
  5. Funções & Closures
  6. Antipadrões específicos do Go

1. Tratamento de Erros {#errors}

// ❌ Ignorando erros
resultado, _ := os.Open(caminho)

// ✅ — sempre trate; use _ apenas quando o erro for comprovadamente irrelevante
resultado, err := os.Open(caminho)
if err != nil {
    return fmt.Errorf("abrir %s: %w", caminho, err)
}
// ❌ Variável de erro redundante
err := fazA()
if err != nil { return err }
err = fazB()
if err != nil { return err }

// ✅ — cada :=/: é aceitável; isso é Go idiomático. Não tente "corrigir".
// O que você PODE simplificar: colapsar em uma linha quando o corpo do if é um único return
if err := fazA(); err != nil { return err }
if err := fazB(); err != nil { return err }
// ❌ Tipo de erro personalizado sem valor agregado
type MeuErro struct{ msg string }
func (e MeuErro) Error() string { return e.msg }

// ✅ — use errors.New ou fmt.Errorf a menos que os chamadores precisem inspecionar o tipo
var ErrNaoEncontrado = errors.New("não encontrado")
return fmt.Errorf("consulta %q: %w", chave, ErrNaoEncontrado)

Empacote erros com %w (não %v) para que os chamadores possam usar errors.Is / errors.As.


2. Slices & Maps {#slices}

// ❌ Aumentando um slice sem pré-alocação quando o tamanho é conhecido
var resultado []string
for _, item := range items {
    resultado = append(resultado, item.Nome)
}

// ✅
resultado := make([]string, 0, len(items))
for _, item := range items {
    resultado = append(resultado, item.Nome)
}
// ❌ Verificação manual de existência antes de escrever no map
if _, ok := m[chave]; !ok {
    m[chave] = []string{}
}
m[chave] = append(m[chave], valor)

// ✅ — append em slice nil é Go válido
m[chave] = append(m[chave], valor)
// ❌ Copiando um map por atribuição (copia referência)
copia := original

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

3. Goroutines & Canais {#concurrency}

// ❌ Goroutine "dispara e esquece" sem ciclo de vida
vá trabalhar()

// ✅ — use errgroup ou WaitGroup para rastrear conclusão
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    trabalhar()
}()
wg.Wait()
// ❌ Canal sem buffer causando bloqueio desnecessário da goroutine
ch := make(chan Resultado)
go func() { ch <- computar() }()
resultado := <-ch

// ✅ — para resultado único, canal com buffer evita vazamento de goroutine se o receptor sair cedo
ch := make(chan Resultado, 1)
go func() { ch <- computar() }()
resultado := <-ch
// ❌ select com default de espera ocupada
for {
    select {
    case v := <-ch:
        processar(v)
    default:
        // girar
    }
}

// ✅ — select bloqueante a menos que você realmente precise de não bloqueio
for v := range ch {
    processar(v)
}

Use golang.org/x/sync/errgroup para fan-out com coleta de erros.


4. Structs & Interfaces {#structs}

// ❌ Interface grande
type Armazenamento interface {
    Get(chave string) ([]byte, error)
    Set(chave string, val []byte) error
    Delete(chave string) error
    List(prefixo string) ([]string, error)
    // ... mais 10 métodos
}

// ✅ — interfaces pequenas e compostas
type Obter interface { Get(chave string) ([]byte, error) }
type Definir interface { Set(chave string, val []byte) error }
type Armazenamento interface { Obter; Definir }
// ❌ Retornando struct concreto do construtor (amarra os chamadores à implementação)
func NovoArmazenamento() *ArmazenamentoRedis { ... }

// ✅ — retorne interface quando você tem ou antecipa múltiplas implementações
func NovoArmazenamento() Armazenamento { return &ArmazenamentoRedis{...} }
// ❌ Receiver ponteiro para tipos de valor pequenos
func (p *Ponto) X() float64 { return p.x }

// ✅ — receiver valor para tipos imutáveis pequenos
func (p Ponto) X() float64 { return p.x }

Regra: receiver ponteiro quando o método altera o estado OU a struct é grande (>3 campos de tamanho não trivial). Receiver valor caso contrário.


5. Funções & Closures {#functions}

// ❌ Valores de retorno nomeados usados apenas para evitar uma declaração de variável
func dividir(a, b float64) (resultado float64, err error) {
    resultado = a / b
    return
}

// ✅ — retornos nomeados valem a pena apenas para mutação adiada ou documentação
func dividir(a, b float64) (float64, error) {
    if b == 0 { return 0, errors.New("divisão por zero") }
    return a / b, nil
}
// ❌ Closure capturando variável de loop (erro clássico do Go, corrigido no Go 1.22+)
// Pré-1.22: cada goroutine captura o mesmo i
for i := 0; i < n; i++ {
    go func() { usar(i) }()
}

// ✅ (Go <1.22 — passar como parâmetro)
for i := 0; i < n; i++ {
    go func(i int) { usar(i) }(i)
}
// Go 1.22+: variável de loop com escopo por iteração, então o original é seguro

6. Antipadrões específicos do Go {#antipatterns}

AntipadrãoPreferido
if err != nil { return err } repetido 5+ vezesaceitável — é Go idiomático
panic para erros esperadosreturn err
init() com efeitos colateraisinicialização explícita em main ou construtores
interface{} / any sem genéricosuse genéricos (Go 1.18+) ou interfaces tipadas
Campo Mutex não adjacente aos dados que protegecoloque mu diretamente acima do campo que ele protege
Canal de canaisgeralmente sinal de superengenharia; redesenhe
time.Sleep em testesuse hooks de testing ou canais para sincronização
Tipos exportados com campos não exportados (quando os campos são o ponto principal)structs estilo record com todos os campos exportados
log.Fatal fora de mainretorne erros para cima na pilha

Limitações

  • Estas são diretrizes específicas da linguagem e não cobrem decisões arquiteturais gerais.
  • A supercompressão pode reduzir a legibilidade; use o bom senso.

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.

Habilidades Relacionadas