Table des matières
Définir les fonctions génériques
Utiliser les contraintes de type
Créer des structures de données génériques
Maison développement back-end Golang Comment utiliser des génériques à Golang

Comment utiliser des génériques à Golang

Sep 19, 2025 am 05:29 AM
golang Génériques

Les génériques en GO permettent de types et des fonctions réutilisables et des structures de données. Introduits dans GO 1.18, ils réduisent la duplication de code en permettant aux fonctions telles que Func Max [t comparable] (a, b t) t pour fonctionner sur plusieurs types tout en appliquant des contraintes. Les paramètres de type entre crochets, tels que [t comparable], définissent les opérations acceptables, où comparable garantit le soutien à la comparaison. Contraintes personnalisées à l'aide d'interfaces, comme l'interface de numéro de type {int | float64 | float32}, restreindre les types à ceux qui prennent en charge des opérations spécifiques, telles que l'ajout dans SUM [Number] (A, B T) T. Des structures de données génériques, telles que la pile de type [t] structure {éléments [] t}, permettent de créer des conteneurs flexibles qui fonctionnent avec tout type, améliorant la réutilisabilité sans sacrifier les performances ni la sécurité.

Comment utiliser des génériques à Golang

Les génériques dans GO vous permettent d'écrire des fonctions et des structures de données qui fonctionnent avec différents types tout en maintenant la sécurité du type. Introduits dans GO 1.18, ils aident à réduire la duplication du code lorsque la logique est la même sur plusieurs types.

Définir les fonctions génériques

Pour créer une fonction générique, utilisez des paramètres de type à l'intérieur des crochets carrés [] avant les paramètres de fonction ordinaire.

Par exemple, voici une fonction simple qui renvoie le plus grand des deux valeurs:

func max [t comparable] (a, b t) t {
Si a> b {
retourner un
}
retour b
}

Le T est un paramètre de type, et comparable est une contrainte qui garantit que t prend en charge les opérations de comparaison comme > . Lorsque vous appelez cette fonction, vous pouvez transmettre des types comme int , float64 ou string .

Utiliser les contraintes de type

Les contraintes définissent les opérations qu'un paramètre de type doit prendre en charge. Vous pouvez utiliser des contraintes intégrées comme comparables ou n'importe quel (qui permet de tout type), ou définir votre propre à l'aide d'interfaces.

Exemple avec une contrainte personnalisée:

Type d'interface numéro {
int | float64 | float32
}

func sum [t numéro] (a, b t) t {
retour AB
}

Cela restreint T à uniquement des types numériques, garantissant le L'opération est valide.

Créer des structures de données génériques

Vous pouvez également définir des types génériques, tels que les conteneurs:

Type Stack [t any] struct {
articles [] t
}

func (s * pile [t]) push (item t) {
s.items = annexe (S.Items, article)
}

func (s * pile [t]) pop () (t, bool) {
Si Len (S.Items) == 0 {
var zéro t
retourner zéro, faux
}
Article: = S.Items [Len (S.Items) -1]
S.Items = S.Items [: Len (S.Items) -1]
Retour élément, vrai
}

Cette pile [t] fonctionne avec n'importe quel type, comme pile [int] ou pile [String] .

L'utilisation de génériques rend votre code de rendez-vous plus réutilisable et plus sûr sans sacrifier les performances. Gardez simplement les contraintes claires et limitez la complexité pour maintenir la lisibilité.

Fondamentalement, ajoutez simplement les paramètres de type si nécessaire et spécifiez ce que ces types devraient prendre en charge.

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Quelle est la structure structure vide {} utilisée dans Golang Quelle est la structure structure vide {} utilisée dans Golang Sep 18, 2025 am 05:47 AM

Struct {} est une structure sans champ dans GO, qui occupe des octets zéro et est souvent utilisé dans des scénarios où les données ne sont pas nécessaires. Il est utilisé comme signal dans le canal, comme la synchronisation de la goroutine; 2. Utilisé comme collection de types de valeurs de cartes pour réaliser des vérifications de l'existence clé en mémoire efficace; 3. Récepteurs de méthode sans état définissables, adaptés aux fonctions d'injection de dépendance ou d'organisation. Ce type est largement utilisé pour exprimer le débit de contrôle et effacer les intentions.

Comment lisez-vous et écrivez-vous des fichiers dans Golang? Comment lisez-vous et écrivez-vous des fichiers dans Golang? Sep 21, 2025 am 01:59 AM

GoprovidessIMPLEAFEFFIENTSFILEHandlingusingheosandbufiopackages.toreAdasmallFileEentirely, useos.readfile, wholoadStheContenTiToMeMorySafelyandAutomAtical ManagesFileOperations.ForlARGEFILSORINCREM

Que sont les middleware dans le contexte des serveurs Web Golang? Que sont les middleware dans le contexte des serveurs Web Golang? Sep 16, 2025 am 02:16 AM

Middlewareingowebserversafunction aterttercepthttprequestsboreetheyreachthehandler, permettre à la transformation de la transmission de la transmission; ils enworkbywrapinghandlerstoaddpre-andpost-processingLogicsuchy

Comment gérez-vous les arrêts gracieux dans une application Golang? Comment gérez-vous les arrêts gracieux dans une application Golang? Sep 21, 2025 am 02:30 AM

GracefulShutdownSingoApplications est en cas de renforcement de la fini auprès, par conduisant en intervenant sur les liens de gits et les procédures de permission, thenstoppingHTTPServersgracetointiaSeshutdownProcedures, thenstoppinghttpServerAlActiveRerequest

Qu'est-ce que CGO et quand l'utiliser à Golang Qu'est-ce que CGO et quand l'utiliser à Golang Sep 21, 2025 am 02:55 AM

CgoenablesGotoCallccode, permettant à Integration avec CLIBRARYSILLOPENSSL, AccessTolow-LevelSystemapis, et performanceOptimization; iTRequireReSIMPORTING "C" WithchedersIncoments, USESC.Function () Syntax, anddemandscarefurmorymanagement.wowever, cogoincinc, cogoincc

Comment utiliser des génériques avec des caractères génériques (? Étend T) en Java? Comment utiliser des génériques avec des caractères génériques (? Étend T) en Java? Sep 20, 2025 am 02:47 AM

? Extenst signifie "sous-type T inconnu", utilisé pour implémenter des opérations en lecture seule dans les génériques, permettant d'accepter T ou l'une de ses sous-classes, adapté aux scénarios où les données sont lues mais non écrites, telles que la liste

Comment créer un maréchaueur / unmarshaller personnalisé pour JSON à Golang Comment créer un maréchaueur / unmarshaller personnalisé pour JSON à Golang Sep 19, 2025 am 12:01 AM

Implémente la sérialisation et la désérialisation JSON des structures GO personnalisables pour Marshaljson et Unmarshaljson, adaptées à la gestion des formats non standard ou compatibles avec les anciennes données. 2. Contrôler la structure de sortie via Marshaljson, comme la conversion des formats de champ; 3. Analyser les données de format spécial via Unmarshaljson, telles que les dates personnalisées; 4. Faites attention à éviter les boucles infinies causées par des appels récursifs et utilisez un alias de type pour contourner les méthodes personnalisées.

Déverrouiller la réutilisabilité avec les génériques dactylographiés Déverrouiller la réutilisabilité avec les génériques dactylographiés Sep 16, 2025 am 03:14 AM

TypeScriptGenerricSenable est utile, type-safecodeByAllowingFunctions, interfaces et componentStoworkwithHitHultipletypes whilepreservingypeinformation.1.GenerricsusetypevariblesLikettorepresentPlaceHoldertyPes, asseenInTypeTityFunction, preservingTypeSaSaSafet

See all articles