Maison >développement back-end >Golang >Comment Go Generics peut-il simplifier les calculs numériques ?

Comment Go Generics peut-il simplifier les calculs numériques ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 02:07:09824parcourir

How Can Go Generics Simplify Numerical Calculations?

Fonctions génériques pour les données numériques dans Go

Lors de la création d'une calculatrice dans Go, gérer la différence entre les entiers et les flottants peut être un défi. Il existe plusieurs façons d'aborder ce problème, notamment :

Convertir tout en flottants

Cette approche implique de convertir toutes les entrées en flottants, car les flottants ont une plage plus large que les entiers. Cependant, cela peut entraîner des problèmes de précision pour les grands entiers.

Créer des fonctions distinctes pour chaque type

Vous pouvez également créer des fonctions distinctes pour chaque type, telles que addInt et ajoutezFloat. Bien qu'il s'agisse d'une approche sans ambiguïté, elle peut conduire à une duplication de code et à des passe-partout.

Utilisation de génériques (Go 1.18 et versions ultérieures)

Avec l'introduction de génériques dans Go 1.18 , une solution plus élégante devient disponible. Vous pouvez définir une fonction générique avec un paramètre de type restreint aux types numériques :

func add[T Number](a, b T) T {
    return a + b
}

La contrainte Number peut être définie à l'aide du package golang.org/x/exp/constraints :

import (
    "golang.org/x/exp/constraints"
)

type Number interface {
    constraints.Integer | constraints.Float
}

Avec cette fonction générique, vous pouvez effectuer des additions avec n'importe quel type numérique (entiers, flottants et même complexes) nombres) :

fmt.Println(add(1, 2))     // 3 (int + int)
fmt.Println(add(1.5, 3.2)) // 4.7  (float64 + float64)

Limitations

Bien que les fonctions génériques offrent de la flexibilité, gardez à l'esprit les limitations suivantes :

  • Les arguments doivent avoir le même type.
  • Les opérateurs arithmétiques ne sont pris en charge que pour tous les types dans la contrainte. Dans ce cas, tous les types numériques prennent en charge l'opérateur.
  • Des valeurs NaN et infinies peuvent être rencontrées lorsque vous travaillez avec des flottants.

En tirant parti des génériques, vous pouvez écrire du code concis et réutilisable qui gère les données numériques de manière transparente dans vos programmes Go.

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