Maison > Article > développement back-end > Comment attribuer des variables avec des types spécifiques à des valeurs d'interface sans assertions de type dans Go ?
Attribuer des variables avec des types spécifiques à des valeurs d'interface sans assertions de type
Lorsque vous travaillez avec des interfaces qui acceptent différents types de structures avec des champs et des méthodes partagés, il peut devenir fastidieux d'effectuer des assertions de type répétées pour accéder à des propriétés spécifiques. Pour résoudre ce problème, nous explorons des solutions alternatives et clarifions les limitations imposées par le système de typage statique de Go.
Typage statique de Go et manque de génériques
Contrairement aux langages typés dynamiquement, Go est typé statiquement, nécessitant que les types de variables soient connus au moment de la compilation. Le manque de génériques dans l'itération actuelle de Go limite encore la possibilité de créer des variables avec des types arbitraires.
Approches alternatives
Exemple
// Define an interface with common fields and methods type Data interface { GetParam() int SetParam(param int) String() string } // Define concrete struct types type Struct1 struct { Param int } func (s *Struct1) GetParam() int { return s.Param } func (s *Struct1) SetParam(param int) { s.Param = param } func (s *Struct1) String() string { return "Struct1: " + strconv.Itoa(s.Param) } type Struct2 struct { Param float64 } func (s *Struct2) GetParam() float64 { return s.Param } func (s *Struct2) SetParam(param float64) { s.Param = param } func (s *Struct2) String() string { return "Struct2: " + strconv.FormatFloat(s.Param, 'f', -1, 64) } // Function to process data that implements the Data interface func method(data Data) { // No need for type assertions or switches data.SetParam(15) fmt.Println(data.String()) }
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!