Maison > développement back-end > Golang > Quels sont les avantages et les applications des structures vides dans Go ?

Quels sont les avantages et les applications des structures vides dans Go ?

Susan Sarandon
Libérer: 2024-11-10 17:46:02
original
1027 Les gens l'ont consulté

What Are the Benefits and Applications of Empty Structs in Go?

Structs vides dans Go : leur objectif et leurs applications

Go propose une fonctionnalité unique avec des structures vides (struct{}). Ces structures de taille nulle possèdent des caractéristiques distinctes qui les rendent utiles dans divers scénarios.

Avantages des structures vides

  • Empreinte mémoire minimale : Les structures vides ont une taille de 0 octet, ce qui en fait le plus petit élément de construction de Go. Cela permet de conserver la mémoire lors du stockage de grandes collections de ces structures dans des tranches ou des canaux.
  • Efficacité dans les canaux : En utilisant des structures vides dans les canaux, vous pouvez notifier les événements sans transmettre d'informations supplémentaires. . C'est à la fois efficace et peu encombrant.
  • Conteneur pour les méthodes : Les structures vides peuvent servir de conteneurs pour les méthodes, vous permettant de simuler des interfaces à des fins de test. Ils vous permettent de définir des méthodes sans avoir besoin de données réelles.
  • Implémentation d'ensemble : Une structure vide peut représenter un objet défini dans Go. En utilisant une carte avec les clés des éléments de l'ensemble souhaités, vous pouvez implémenter efficacement un ensemble qui consomme un minimum d'espace mémoire.
  • Implémentation des interfaces via les méthodes du récepteur : Les structures vides jouent un rôle dans l'implémentation interfaces via des méthodes de réception. Ils fournissent un moyen de spécifier des méthodes sans définir de données membres.

Exemples d'utilisation

  • Notification dans les canaux :
import "sync"

var wg sync.WaitGroup

func notify() {
    wg.Done()
}

func main() {
    wg.Add(1)
    go notify()
    wg.Wait()
}
Copier après la connexion
  • Moqueur interfaces :
import (
    "fmt"
    "testing"
)

type SomeInterface interface {
    DoSomething()
}

type Empty struct{}

func (e Empty) DoSomething() {
    fmt.Println("Doing something")
}

func Test(t *testing.T) {
    var i SomeInterface = Empty{}
    i.DoSomething()
}
Copier après la connexion
  • Ensembles d'implémentation :
type Set[T comparable] map[T]struct{}

func NewSet[T comparable](s []T) Set[T] {
    set := make(Set[T], len(s))
    for _, v := range s {
        set[v] = struct{}{}
    }
    return set
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal