Communitygithub.com

JantonioFC/skillsbank

Référence idiomatique et efficace pour le langage Go.

Qu'est-ce que skillsbank ?

Cette compétence fournit un guide de référence complet pour écrire du code Go idiomatique, efficace et maintenable. Elle couvre la gestion des erreurs, les slices et maps, la concurrence avec goroutines et canaux, les structs et interfaces, les fonctions et fermetures, ainsi que les anti-patrons spécifiques à Go. L'objectif est d'aider les développeurs à adopter les meilleures pratiques du langage, en évitant les pièges courants et en optimisant la lisibilité et la performance du code. Cette compétence est utile sur toute plateforme d'agent IA qui prend en charge l'écriture ou la révision de code Go, comme Claude Code, Cursor ou Codex. Elle fonctionne en analysant le code proposé et en suggérant des améliorations basées sur les directives présentées dans le fichier SKILL.md, en mettant l'accent sur des exemples concrets avant/après.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Go : Référence d'efficacité idiomatique

Table des matières

  1. Gestion des erreurs
  2. Slices et Maps
  3. Goroutines et Canaux
  4. Structs et Interfaces
  5. Fonctions et Fermetures
  6. Anti-patrons spécifiques à Go

1. Gestion des erreurs {#errors}

// ❌ Ignorer les erreurs
result, _ := os.Open(path)

// ✅ — toujours gérer ; n'utiliser _ que lorsque l'erreur est prouvée sans conséquence
result, err := os.Open(path)
if err != nil {
    return fmt.Errorf("ouverture %s : %w", path, err)
}
// ❌ Variable d'erreur redondante
err := doA()
if err != nil { return err }
err = doB()
if err != nil { return err }

// ✅ — chaque := / = est correct ; c'est du Go idiomatique. N'essayez pas de le « corriger ».
// Ce que vous POUVEZ simplifier : réduire à une seule ligne quand le corps du if est un simple return
if err := doA(); err != nil { return err }
if err := doB(); err != nil { return err }
// ❌ Type d'erreur personnalisé sans valeur ajoutée
type MyError struct{ msg string }
func (e MyError) Error() string { return e.msg }

// ✅ — utiliser errors.New ou fmt.Errorf sauf si les appelants ont besoin d'inspecter le type
var ErrNotFound = errors.New("non trouvé")
return fmt.Errorf("recherche %q : %w", key, ErrNotFound)

Enveloppez les erreurs avec %w (pas %v) pour que les appelants puissent utiliser errors.Is / errors.As.


2. Slices et Maps {#slices}

// ❌ Agrandir une slice sans pré-allocation quand la taille est connue
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)
}
// ❌ Vérification manuelle d'existence avant écriture dans une map
if _, ok := m[key]; !ok {
    m[key] = []string{}
}
m[key] = append(m[key], value)

// ✅ — append sur une slice nil est valide en Go
m[key] = append(m[key], value)
// ❌ Copier une map par affectation (copie la référence)
copy := original

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

3. Goroutines et Canaux {#concurrency}

// ❌ Goroutine « fire-and-forget » sans cycle de vie
go doWork()

// ✅ — utiliser errgroup ou WaitGroup pour suivre l'achèvement
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    doWork()
}()
wg.Wait()
// ❌ Canal non tamponné bloquant une goroutine inutilement
ch := make(chan Result)
go func() { ch <- compute() }()
result := <-ch

// ✅ — pour un seul résultat, un canal tamponné évite la fuite de goroutine si le receveur se ferme tôt
ch := make(chan Result, 1)
go func() { ch <- compute() }()
result := <-ch
// ❌ select avec une attente active par défaut
for {
    select {
    case v := <-ch:
        process(v)
    default:
        // boucle
    }
}

// ✅ — select bloquant sauf si vous avez vraiment besoin de non-bloquant
for v := range ch {
    process(v)
}

Utilisez golang.org/x/sync/errgroup pour le fan-out avec collecte d'erreurs.


4. Structs et Interfaces {#structs}

// ❌ Grande interface
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éthodes supplémentaires
}

// ✅ — interfaces petites et composables
type Getter interface { Get(key string) ([]byte, error) }
type Setter interface { Set(key string, val []byte) error }
type Storage interface { Getter; Setter }
// ❌ Retourner une structure concrète depuis un constructeur (lie les appelants à l'implémentation)
func NewStore() *RedisStore { ... }

// ✅ — retourner une interface lorsque vous avez ou anticipez plusieurs implémentations
func NewStore() Storage { return &RedisStore{...} }
// ❌ Récepteur pointeur pour de petits types de valeur
func (p *Point) X() float64 { return p.x }

// ✅ — récepteur valeur pour les petits types immuables
func (p Point) X() float64 { return p.x }

Règle : récepteur pointeur lorsque la méthode modifie l'état OU que la structure est grande (>3 champs de taille non triviale). Récepteur valeur sinon.


5. Fonctions et Fermetures {#functions}

// ❌ Valeurs de retour nommées utilisées uniquement pour éviter une déclaration de variable
func divide(a, b float64) (result float64, err error) {
    result = a / b
    return
}

// ✅ — les retours nommés n'en valent la peine que pour une mutation différée ou la documentation
func divide(a, b float64) (float64, error) {
    if b == 0 { return 0, errors.New("division par zéro") }
    return a / b, nil
}
// ❌ Fermeture capturant la variable de boucle (bug classique en Go, corrigé dans Go 1.22+)
// Avant 1.22 : chaque goroutine capture la même i
for i := 0; i < n; i++ {
    go func() { use(i) }()
}

// ✅ (Go <1.22 — passer en paramètre)
for i := 0; i < n; i++ {
    go func(i int) { use(i) }(i)
}
// Go 1.22+ : variable de boucle avec sa propre portée par itération, donc l'original est sûr

6. Anti-patrons spécifiques à Go {#antipatterns}

Anti-patronPréféré
if err != nil { return err } répété 5 fois ou plusacceptable — c'est du Go idiomatique
panic pour les erreurs attenduesreturn err
init() avec effets de bordinitialisation explicite dans main ou les constructeurs
interface{} / any sans génériquesutiliser les génériques (Go 1.18+) ou des interfaces typées
Champ Mutex non adjacent aux données qu'il protègeplacer mu juste au-dessus du champ qu'il protège
Canal de canauxgénéralement un signe de sur-ingénierie ; reconcevoir
time.Sleep dans les testsutiliser des hooks de testing ou des canaux pour la synchronisation
Types exportés avec champs non exportés (quand les champs sont le sujet principal)structures de type record avec tous les champs exportés
log.Fatal en dehors de mainremonter les erreurs dans la pile

Limitations

  • Ces directives sont spécifiques au langage et ne couvrent pas les décisions architecturales globales.
  • Une sur-compression pourrait réduire la lisibilité ; faites preuve de jugement.

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 associés