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
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!