Maison >développement back-end >Golang >Golang ne prend-il pas en charge les génériques ?

Golang ne prend-il pas en charge les génériques ?

(*-*)浩
(*-*)浩original
2019-12-13 14:26:553486parcourir

Golang ne prend-il pas en charge les génériques ?

L'équipe Golang estime que la complexité du système de type et du temps d'exécution est trop coûteuse et n'a pas encore trouvé une bonne conception capable de compenser cette complexité.

La carte et la tranche intégrées ont en fait la saveur des génériques. De plus, interface{} peut être utilisée pour construire des conteneurs, qui peuvent obtenir l'effet des génériques. Il n’existe donc pas de support direct pour les génériques jusqu’à présent. (Apprentissage recommandé : GO )

Nous avons l'intention d'expliquer comment gérer ce problème dans Golang dans quelques exemples.

Tout d’abord, examinons un problème de tri des bulles. Tri de tranches de tableaux d'entiers.

package main

import (
	"fmt"
)

func bubbleSort(array []int) {
	for i := 0; i < len(array); i++ {
		for j := 0; j < len(array)-i-1; j++ {
			if array[j] > array[j+1] {
				array[j], array[j+1] = array[j+1], array[j]
			}
		}
	}
}

func main() {
	a1 := []int{3, 2, 6, 10, 7, 4, 6, 5}
	bubbleSort(a1)
	fmt.Println(a1)
}

Le résultat de l'exemple ci-dessus est :

[2 3 4 5 6 6 7 10]

Ensuite, si nous voulons que ce bubbleSort prenne en charge le tri des données de type float en même temps, ou trie en fonction la longueur de la chaîne Que faut-il faire ?

Dans d'autres langages comme Java, nous pouvons définir bubbleSort pour prendre en charge le tri générique, mais cela n'est pas possible dans Go. Pour atteindre cet objectif, nous pouvons utiliser l’interface pour obtenir la même fonctionnalité.

Pour le problème de tri ci-dessus, nous pouvons analyser les étapes de tri :

Voir la longueur de la tranche pour parcourir les éléments (Len) ; Comparez deux éléments dans la tranche (Less) ;

Décidez s'il faut échanger les positions des éléments (Swap) en fonction du résultat de la comparaison.

À ce stade, vous avez peut-être compris que nous pouvons décomposer la fonction ci-dessus en une interface prenant en charge n'importe quel type. Tout autre type de données peut être traité à l'aide des fonctions de cette interface tant qu'elle implémente cette interface. . Trié.

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