Maison  >  Article  >  développement back-end  >  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
WBOYavant
2024-02-13 11:00:19687parcourir

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
}

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)

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

[1]int{42}
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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Go Gin : vérifiez base64Article suivant:Go Gin : vérifiez base64