


Existe-t-il un moyen de garantir que la valeur transmise comporte certains champs à l'aide de génériques ?
Existe-t-il un moyen de garantir que la valeur transmise comporte certains champs en utilisant des génériques ? C'est un problème que de nombreux développeurs rencontrent souvent lorsqu'ils utilisent des génériques. En PHP, nous pouvons réaliser cette fonction grâce à des contraintes de type et à l'implémentation de l'interface. Premièrement, nous pouvons utiliser des contraintes de type pour garantir que la valeur transmise est une instance d'une classe. Nous pouvons ensuite utiliser des interfaces pour définir des spécifications pour certains champs, en garantissant que la valeur transmise possède ces champs. De cette façon, nous pouvons utiliser des génériques dans notre code et garantir que les valeurs transmises répondent aux exigences spécifiques du champ. De cette manière, nous pouvons mieux tirer parti des génériques et garantir la fiabilité et la sécurité de notre code.
Contenu de la question
J'essaie de définir une fonction générique en go qui accepte une valeur avec certains champs, comme id int
. J'ai essayé plusieurs méthodes mais aucune ne semble fonctionner. Voici un exemple de ce que j'ai essayé.
package main import ( "fmt" ) func Print[T IDer](s T) { fmt.Print(s.ID) } func main() { Print(Person{3, "Test"}) } type IDer interface { ~struct{ ID int } } type Person struct { ID int Name string } type Store struct { ID int Domain string }
Voici le lien du terrain de jeu : https://gotipplay.golang.org/p/2i4rsucwagf
Dans l'exemple ci-dessus, je veux m'assurer que chaque valeur transmise à la fonction print
possède une propriété print
函数的每个值都有一个属性 id int
,该属性也可以在函数中访问。有什么方法可以在 go 中实现此目的,而无需在接口中定义方法(例如 getid() int
qui est également accessible dans la fonction. Existe-t-il un moyen d'y parvenir sans définir la méthode dans l'interface (par exemple getid() int
) ?
Solution de contournement
Existe-t-il un moyen d'y parvenir sans définir de méthode dans l'interface (par exemple getid() int) ?
Non, vous devez définir les méthodes dans l'interface.
L'implémentation des génériques dans go 1.18 ne prend pas en charge les types de structure, bien que la proposition de paramètres de type primitif suggère une prise en charge. Pour accéder aux champs publics dans une union, voir aussi cette explication.
Cela dit, je pense qu'il convient de signaler un malentendu qui pourrait facilement surgir de votre exemple : la signification de l'approximation ~t
(type tilde) signifie "l'ensemble des types dont le type de base est t p>".
Maintenant, quand vous écrivez :
~struct{ id int }
Cela signifie que son type sous-jacent est exactement struct{ id int }
. Quoi qu'il en soit, cela n'inclut pas les structures avec des champs struct{ id int }
。无论如何,这不包括具有字段 id int
和其他内容的结构。例如。 type foo struct { id int; 的底层类型;名称字符串 }
是 struct { id int;命名字符串 }
,而不是 struct{ id int }
et d'autres contenus. Par exemple. type foo struct { le type sous-jacent d'id int; nommé string}
est struct { id int; nommé string>
, pas struct{ id int }
, donc la contrainte ne peut pas être satisfaite de toute façon.
L'implémentation actuelle du paramètre de temps n'a pas de syntaxe pour spécifier les types de structure partielle. Je me souviens de la propositiond'ajouter des termes de champ (et des termes et méthodes de type) aux contraintes d'interface), mise en ligne :
type IDer interface { ID int }
Cela permettra d'atteindre ce que vous voulez faire sans détruire le sens du tilde ~
. Mais cela ne sera pas inclus dans go 1.18.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Depuis sa création en 2009, Bitcoin est devenu un leader dans le monde des cryptomonnaies et son prix a connu d’énormes fluctuations. Pour fournir un aperçu historique complet, cet article compile les données sur les prix du Bitcoin de 2009 à 2025, couvrant les principaux événements du marché, les changements de sentiment du marché et les facteurs importants influençant les mouvements de prix.

1. Tout d’abord, faites un clic droit sur l’espace vide de la barre des tâches en bas de Windows 11 et sélectionnez [Paramètres de la barre des tâches]. 2. Recherchez [taskbarcorneroverflow] à droite dans les paramètres de la barre des tâches. 3. Recherchez ensuite [horloge] ou [Horloge] au-dessus et sélectionnez pour l'allumer. Méthode 2 : 1. Appuyez sur le raccourci clavier [win+r] pour appeler run, entrez [regedit] et appuyez sur Entrée pour confirmer. 2. Ouvrez l'éditeur de registre, recherchez-y [HKEY_CURRENT_USERControlPanel] et supprimez-le. 3. Après la suppression, redémarrez l'ordinateur et vous serez invité à effectuer la configuration. Lorsque vous reviendrez au système, l'heure s'affichera.

Réponse : Les forums communautaires et groupes de discussion suivants sont disponibles pour les questions de programmation fonctionnelle Java : StackOverflow : le plus grand site Web de questions et réponses sur la programmation au monde avec une communauté d'experts en programmation fonctionnelle Java. JavaFunctionalProgramming : un forum communautaire axé sur la programmation fonctionnelle Java, proposant des discussions sur les concepts, les fonctionnalités du langage et les meilleures pratiques. Redditr/FunctionalJava : un sous-reddit axé sur la programmation Java fonctionnelle, en se concentrant sur les outils, les bibliothèques et les technologies. Discord : JavaFunctional Programming : service Discord qui propose des discussions, un partage de code et une collaboration en temps réel

Comment utiliser le code Python d’autres personnes ? Rechercher des référentiels de code : recherchez le code dont vous avez besoin sur des plateformes telles que PyPI et GitHub. Code d'installation : utilisez pip ou clonez le référentiel GitHub pour l'installer. Importer des modules : utilisez l'instruction import dans votre script pour importer les modules installés. Travailler avec du code : accédez aux fonctions et aux classes dans les modules. (Facultatif) Adaptez le code : modifiez le code si nécessaire pour l'adapter à votre projet.

Que dois-je faire si l'heure sur mon ordinateur Win11 est toujours fausse ? Nous définissons tous l'heure ou le calendrier lorsque nous utilisons le système Win11, mais de nombreux utilisateurs demandent que l'heure de l'ordinateur soit toujours erronée, alors que se passe-t-il ? Les utilisateurs peuvent cliquer directement sur la barre des tâches ci-dessous, puis rechercher taskbarcorneroverflow pour la configurer. Laissez ce site présenter en détail aux utilisateurs comment ajuster l'erreur de temps sur les ordinateurs Win11. Comment régler l'erreur d'heure de l'ordinateur dans Windows 11. Méthode 1 : 1. Nous faisons d'abord un clic droit sur l'espace vide de la barre des tâches ci-dessous et sélectionnons Paramètres de la barre des tâches. Méthode 2 : 1. Appuyez sur le raccourci clavier win+r pour appeler run, entrez regedit et appuyez sur Entrée pour confirmer.

Types d'exceptions courants et leurs mesures de réparation dans le développement de fonctions Java Lors du développement de fonctions Java, diverses exceptions peuvent survenir, affectant l'exécution correcte de la fonction. Voici les types d'exceptions courants et leurs mesures de réparation : 1. NullPointerException Description : levée lors de l'accès à un objet qui n'a pas été initialisé. Correctif : assurez-vous de vérifier que l'objet n'est pas nul avant de l'utiliser. Exemple de code : try{Stringname=null;System.out.println(name.length());}catch(NullPointerExceptione){

overflow est une propriété CSS utilisée pour contrôler le mode d'affichage du contenu de l'élément lorsqu'il dépasse le conteneur. Les valeurs disponibles incluent : visible : le contenu est visible, le conteneur de débordement est masqué : le contenu du débordement est coupé scroll : le la barre de défilement s'affiche pour visualiser le contenu de débordement auto : le navigateur détermine automatiquement s'il faut afficher la barre de défilement hériter : hérite de l'attribut de débordement de l'élément parent

En tant que plate-forme de vidéos courtes de renommée mondiale, Douyin dispose d'une énorme base d'utilisateurs et de créateurs de contenu. Cependant, comme les règles de la plateforme sont constamment mises à jour et améliorées, certains utilisateurs peuvent se heurter à des interdictions de compte. Cela a soulevé des questions publiques sur la transparence et l’équité de la gestion de la plateforme. Cet article abordera la question des interdictions de compte Douyin et si les utilisateurs ont des moyens de faire appel après l'interdiction de leurs comptes. Il peut y avoir de nombreuses raisons d'être banni de la plateforme Douyin, y compris, mais sans s'y limiter, le contenu illégal, la violation des réglementations de la plateforme, la violation des droits d'autrui, etc. Afin de maintenir l'ordre de la plateforme et les intérêts des utilisateurs, Douyin a mis en place une série de règles et de mécanismes de contrôle. Lorsque certains utilisateurs enfreignent les règles, leurs comptes peuvent être bannis. Cependant, certains utilisateurs peuvent s'interroger ou être insatisfaits des raisons de l'interdiction.
