Maison > développement back-end > Golang > Les génériques Golang excluent les types de tranches ou de tableaux

Les génériques Golang excluent les types de tranches ou de tableaux

WBOY
Libérer: 2024-02-13 11:00:19
avant
761 Les gens l'ont consulté

Golang 泛型排除切片或数组类型

L'éditeur PHP Xiaoxin vous propose aujourd'hui un article sur les génériques de Golang. Les génériques sont une fonctionnalité très attendue dans Golang, mais la dernière proposition exclut la prise en charge des types slice ou array. Cet article expliquera les raisons de cette décision et discutera de l'impact sur les développeurs. Regardons de plus près!

Contenu de la question

J'ai une fonction dans Go avec des génériques qui ne doivent pas être appliqués aux tranches ou aux tableaux. Mais je ne sais pas comment faire. J'en ai trouvé des exemples, mais uniquement dans Typescript, ce qui ne m'a pas permis d'aller plus loin. Par exemple, je veux quelque chose. Comme :

func sth[T everything_but_slices_or_arrays](arg T) { ...doSth... } func sth[T everything_but_slices_or_arrays](arg T) { ...doSth... }

解决方法

您可以使用 comparable

Contournement

Vous pouvez utiliser la contrainte comparable pour arriver à mi-chemin à cause des tranches N'implémente pas cette interface :

func foo[t comparable](arg t) {
    fmt.printf("%#v\n", arg) // for example
}


func main() {
    i := []int{42}
    foo(i) // <- compiler error: []int does not satisfy comparable
}
Copier après la connexion

Cependant, les

tableaux

(types similaires) sont :

func foo[t comparable](arg t) {
    fmt.printf("%#v\n", arg) // for example
}


func main() {
    i := [1]int{42}
    foo(i)
Copier après la connexion

compilera et exécutera pour produire le résultat :

[1]int{42}
Copier après la connexion
comparable 约束有意义,但如果函数不需要任何特定功能,则让它接受 anyCela peut donc dépendre de l'importance d'exclure les tranches et les tableaux dans votre fonction, qui à son tour dépend de ce que fait votre fonction générique.

Une approche plus courante pourrait consister à limiter une fonction générique à la seule portée requise pour garantir que la fonction peut faire ce qu'elle veut qu'elle fasse. Autrement dit, si la fonction nécessite des arguments pouvant être comparés à un type générique, alors

.

Si vous ne voulez tout simplement pas utiliser une fonction de manière arbitraire avec des valeurs d'un certain type (ou de certains types), même s'il n'y a rien de mal à le faire en termes de ce que fait la fonction, cela peut être fait par d'autres moyens (révision de code, pull request, etc.) sont mieux réglementés et réglementés. 🎜 🎜Il est difficile d'en être sûr sans savoir exactement ce que va faire votre fonction générique. :)🎜

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal