-1
votes

"Impossible d'utiliser la variable de type [] struct comme interface []" lors de la propagation

Prototype fonction xxx

Utilisation prévue xxx

Erreur

Impossible d'utiliser des FOOS (variable de type [] FOOS) en tant qu'interface {} valeur en argument pour tester

Description

L'utilisation prévue doit être utilisée comme la fonction intégrée ANNEX () .

https://golang.google.cn/pkg/builtine/#append < pré> xxx

Bien que, comme je l'ai vu APPEND () n'utilise pas interface {} , qui est étrange, puisque partout que je Vous avez cherché toutes les personnes disent à utiliser interface {} lorsque vous ne connaissez pas le type. Mais ils ne le font pas. NOPE, ANNEX () Utilise un type "Build-in" appelé Type , ce qui apparemment, les docs disent que c'est un int . Bien que je ne peux pas l'utiliser. Il n'y a pas de tel type. Et non plus, je saurais l'utiliser s'il y avait.

https : //golang.google.cn/pkg/builtin/#type xxx

Alors, je suis très confus ici.

Questions
  1. Pourquoi l'opérateur de la propagation ne fonctionne pas comme prévu? Par exemple, dans JavaScript, l'opérateur de propagation déploie simplement le tableau en éléments. Mais à Golang, il semble que garde le même type de paramètre de tableau tel qu'il est, mais donne au compilateur une instruction ultérieurement pour la diffuser. Qui est étrange.

  2. Sommes-nous même capables de créer des mécanismes personnalisés similaires tels que append () du tout? Ou suis-je un mannequin et j'utilise quelque chose de mal en tout cas?


5 commentaires

Ajouter a une fonction intégrée Super Powers.


La documentation de package intégrée utilise type comme espace réservé pour n'importe quel type. Cette utilisation de Type n'est pas valide Go Syntaxe et n'est pas utilisable dans les fonctions définies de l'application. Comme le dit Peterso, l'annexe a des super pouvoirs.


Je vois. Je me sens comme un peu injuste d'être honnête. Merci d'avoir effacé cela. Donc, ma question est toujours valide. Pourquoi et qui a donné le bowvote? C'est une question légitime qui aidera sûrement les autres personnes aussi et je l'ai faite aussi cristalline que possible. Je ne sais pas ce que Stackoverflow veut plus.


Une future version de Go peut vous donner la puissance de Ajoutez et d'autres produits. Voir blog.golang.org/why-Generics .


@ Ceriselimón Si vous en avez envie, vous pouvez former une réponse puisque je pense que vous fournissez toutes les informations qu'il y a pour répondre à la question. Je vais le marquer comme résolu si possible.


3 Réponses :


3
votes

Je pense que c'est la question que vous rencontrez ici.

https://github.com/golang/go/wiki/interfaceLice

Je ne suis pas un expert en cela, mais j'ai déjà frappé cela avant, la "tranche d'interface vide" n'est pas une interface et ne peut donc être remplacée par un type qui est le problème que vous rencontrez, cela a à voir avec le la structure de la mémoire étant différente. Ce qui précède a une explication beaucoup meilleure que celle que je peux donner.


1 commentaires

Je vois. Regardez-le à nouveau, je peux voir que ... interface {} est interprété comme [] interface {} . Je pensais juste que cela ne devrait pas être le cas. Parce que l'intention de l'opérateur de propagation ne doit pas dire "je veux un tableau d'interfaces", mais dire "je veux un ensemble d'interface {} éléments". C'est pourquoi je pensais que c'était étrange et déroutant, surtout lorsqu'il vient d'un contexte JS: 3. Merci d'ailleurs.



1
votes

Vous pouvez taper votre tranche dactylographiée pour obtenir ce dont vous avez besoin: xxx


1 commentaires

Vous pouvez generic: = Make ([] interface {}, len (foos)) , pour i, f: = plage foos et générique [i] = f , car la longueur de foos est connue. On dirait que ceci est lié à l'autre réponse: Github .Com / golang / go / wiki / interfacelice # what-can-i-do-accoun ad



0
votes

Combinant les deux réponses non négatives dans ce que je ressens est la meilleure solution: xxx

partiellement inspiré par:

https://github.com/golang/go/wiki/interfaceLice#what-can-i -Do-plutôt


0 commentaires