recherche
Maisondéveloppement back-endGolangModèles de conception dans Golang : un guide complet

Design Patterns in Golang: A Comprehensive Guide

Le langage Go est privilégié par les développeurs en raison de sa simplicité et de son efficacité. L'utilisation de modèles de conception dans les projets Go peut améliorer considérablement l'évolutivité et la maintenabilité des applications. Cet article explorera plusieurs modèles de conception courants du langage Go, avec des exemples de code et des scénarios d'application pratiques.


Mon parcours d'apprentissage des langues Go et le framework GoFr

En tant que diplômé senior en informatique et en ingénierie, mon parcours d'apprentissage du langage Go a commencé en contribuant au code du framework GoFr - un framework open source pour créer des applications Web efficaces. C'était un défi passionnant : apprendre une nouvelle langue tout en participant au développement du monde réel et en apprenant les meilleures pratiques.

Le framework GoFr m'a exposé à certains modèles de conception et aux meilleures pratiques du langage Go, et ces expériences ont façonné la façon dont j'écris du code concis et évolutif. Dans cet article, je suis ravi de partager ces informations avec vous car elles ont considérablement amélioré mes compétences en développement.


1. Mode Singleton (Mode créatif)

Le modèle singleton garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global. Ceci est utile pour gérer les ressources partagées telles que les configurations ou les connexions à la base de données.

Exemple :

package main

import (
    "fmt"
    "sync"
)

type Singleton struct{}

var (
    instance *Singleton
    once     sync.Once
)

func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}

func main() {
    obj1 := GetInstance()
    obj2 := GetInstance()
    fmt.Println(obj1 == obj2) // true
}

2. Motif adaptateur (motif structurel)

Le modèle Adaptateur agit comme un pont entre deux interfaces incompatibles. Ce modèle vous permet d'utiliser des classes existantes avec différentes interfaces.

Exemple :

package main

import "fmt"

type LegacyPrinter struct{}

func (l *LegacyPrinter) Print(s string) {
    fmt.Println("Legacy printer output:", s)
}

type ModernPrinter interface {
    PrintMessage(s string)
}

type PrinterAdapter struct {
    legacyPrinter *LegacyPrinter
}

func (p *PrinterAdapter) PrintMessage(s string) {
    p.legacyPrinter.Print(s)
}

func main() {
    legacy := &LegacyPrinter{}
    adapter := &PrinterAdapter{legacyPrinter: legacy}
    adapter.PrintMessage("Hello from adapter!")
}

3. Modèle d'observateur (modèle comportemental)

Le modèle d'observateur définit une relation de dépendance entre les objets, de sorte que lorsqu'un objet change d'état, tous les objets qui en dépendent seront avertis.

Exemple :

package main

import "fmt"

type Observer interface {
    Update(string)
}

type Subject struct {
    observers []Observer
}

func (s *Subject) Attach(o Observer) {
    s.observers = append(s.observers, o)
}

func (s *Subject) Notify(msg string) {
    for _, o := range s.observers {
        o.Update(msg)
    }
}

type ConcreteObserver struct {
    name string
}

func (c *ConcreteObserver) Update(msg string) {
    fmt.Printf("%s received message: %s\n", c.name, msg)
}

func main() {
    subject := &Subject{}
    observer1 := &ConcreteObserver{name: "Observer1"}
    observer2 := &ConcreteObserver{name: "Observer2"}

    subject.Attach(observer1)
    subject.Attach(observer2)

    subject.Notify("Hello, Observers!")
}

Mode options

Le mode option est un moyen flexible de configurer les structures du langage Go, qui peuvent écrire du code plus simple et plus facile à maintenir. Il existe deux méthodes courantes :

1. Options fonctionnelles

L'option fonctionnelle utilise des fonctions pour modifier les propriétés de la structure.

Exemple :

package main

import "fmt"

type Server struct {
    Host string
    Port int
}

func NewServer(opts ...func(*Server)) *Server {
    server := &Server{
        Host: "localhost",
        Port: 8080,
    }

    for _, opt := range opts {
        opt(server)
    }

    return server
}

func WithHost(host string) func(*Server) {
    return func(s *Server) {
        s.Host = host
    }
}

func WithPort(port int) func(*Server) {
    return func(s *Server) {
        s.Port = port
    }
}

func main() {
    server := NewServer(WithHost("127.0.0.1"), WithPort(9090))
    fmt.Printf("Server: %+v\n", server)
}

2. Modèle de constructeur pour les options

Le modèle builder peut également être utilisé pour configurer une structure avec plusieurs paramètres facultatifs.

Exemple :

package main

import "fmt"

type Server struct {
    Host string
    Port int
}

type ServerBuilder struct {
    server Server
}

func (b *ServerBuilder) SetHost(host string) *ServerBuilder {
    b.server.Host = host
    return b
}

func (b *ServerBuilder) SetPort(port int) *ServerBuilder {
    b.server.Port = port
    return b
}

func (b *ServerBuilder) Build() Server {
    return b.server
}

func main() {
    builder := &ServerBuilder{}
    server := builder.SetHost("127.0.0.1").SetPort(9090).Build()
    fmt.Printf("Server: %+v\n", server)
}

Modèles de conception principaux

La meilleure façon d'améliorer votre capacité à maîtriser les modèles de conception est de les mettre en pratique. Les projets du week-end et la participation à des projets open source peuvent accélérer l'apprentissage. L'un des projets auxquels je peux participer est GoFr, où j'ai l'opportunité d'améliorer mes compétences en langue Go en travaillant sur des problèmes du monde réel.

Design Patterns in Golang: A Comprehensive Guide

Projets suggérés

  • GoFr : dépôt GitHub
  • Créez des API REST simples en utilisant différents modèles.
  • Créez une bibliothèque qui implémente divers modèles de conception dans le langage Go.

En pratiquant sur ces projets, vous acquerrez une expérience pratique et une compréhension plus approfondie de la façon dont les modèles de conception résolvent des problèmes du monde réel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Golang vs Python: concurrence et multithreadingGolang vs Python: concurrence et multithreadingApr 17, 2025 am 12:20 AM

Golang convient plus à des tâches de concurrence élevées, tandis que Python présente plus d'avantages dans la flexibilité. 1. Golang gère efficacement la concurrence par le goroutine et le canal. 2. Python repose sur le filetage et l'asyncio, qui est affecté par GIL, mais fournit plusieurs méthodes de concurrence. Le choix doit être basé sur des besoins spécifiques.

Golang et C: les compromis en performanceGolang et C: les compromis en performanceApr 17, 2025 am 12:18 AM

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

Golang vs Python: applications et cas d'utilisationGolang vs Python: applications et cas d'utilisationApr 17, 2025 am 12:17 AM

ChooseGolangForHighPerformanceAnd Concurrence, IdealForBackendServices andNetworkProgramming; selectPythonForrapidDevelopment, dataScience et MachineLearningDuetOtsSertilityAnStensiveLibrarary.

Golang vs Python: différences et similitudes clésGolang vs Python: différences et similitudes clésApr 17, 2025 am 12:15 AM

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

Golang vs Python: Courbe de facilité d'utilisation et d'apprentissageGolang vs Python: Courbe de facilité d'utilisation et d'apprentissageApr 17, 2025 am 12:12 AM

Dans quels aspects Golang et Python sont-ils plus faciles à utiliser et à avoir une courbe d'apprentissage plus lisse? Golang est plus adapté aux besoins élevés de concurrence et de haute performance, et la courbe d'apprentissage est relativement douce pour les développeurs ayant une formation en langue C. Python est plus adapté à la science des données et au prototypage rapide, et la courbe d'apprentissage est très fluide pour les débutants.

La course de performance: Golang vs CLa course de performance: Golang vs CApr 16, 2025 am 12:07 AM

Golang et C ont chacun leurs propres avantages dans les compétitions de performance: 1) Golang convient à une concurrence élevée et à un développement rapide, et 2) C fournit des performances plus élevées et un contrôle fin. La sélection doit être basée sur les exigences du projet et la pile de technologie d'équipe.

Golang vs C: Exemples de code et analyse des performancesGolang vs C: Exemples de code et analyse des performancesApr 15, 2025 am 12:03 AM

Golang convient au développement rapide et à la programmation simultanée, tandis que C est plus adapté aux projets qui nécessitent des performances extrêmes et un contrôle sous-jacent. 1) Le modèle de concurrence de Golang simplifie la programmation de concurrence via le goroutine et le canal. 2) La programmation du modèle C fournit un code générique et une optimisation des performances. 3) La collecte des ordures de Golang est pratique mais peut affecter les performances. La gestion de la mémoire de C est complexe mais le contrôle est bien.

Impact de Golang: vitesse, efficacité et simplicitéImpact de Golang: vitesse, efficacité et simplicitéApr 14, 2025 am 12:11 AM

GOIMIMPACTSDEVENCEMENTSPOSITIVEMENTS INSPECT, EFFICACTION ET APPLICATION.1) VITESSE: GOCOMPILESQUICKLYANDRUNSEFFIÉMENT, IDEALFORLARGEPROROSTS.2) Efficacité: ITSCOMPEHENSIVESTANDARDLIBRARYREDUCEEXTERNEDENDENCES, EnhancingDevelovefficiency.3) Simplicité: Simplicité: Implicité de la manière

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)