Maison > développement back-end > Golang > Comment gérer l'invariance tableau/tranche de Go lorsque vous travaillez avec différents types d'éléments ?

Comment gérer l'invariance tableau/tranche de Go lorsque vous travaillez avec différents types d'éléments ?

Susan Sarandon
Libérer: 2024-12-18 01:47:10
original
716 Les gens l'ont consulté

How to Handle Go's Array/Slice Invariance When Working with Different Element Types?

Gestion de l'invariance des tableaux/tranches dans Go

Dans Go, on peut rencontrer des difficultés en travaillant avec des tableaux ou des tranches de différents types d'éléments. Prenons l'exemple suivant :

func printItems(header string, items []interface{}, fmtString string) {
  // ...
}

func main() {
  var iarr = []int{1, 2, 3}
  var farr = []float{1.0, 2.0, 3.0}
  printItems("Integer array:", iarr, "")
  printItems("Float array:", farr, "")
}
Copier après la connexion

Lors de la compilation de ce code, vous rencontrerez des erreurs dues au manque de covariance tableau/tranche de Go. Plus précisément :

prog.go:26: cannot use iarr (type []int) as type []interface { } in function argument      
prog.go:27: cannot use farr (type []float) as type []interface { } in function argument
Copier après la connexion

Une solution flexible

Une approche pour contourner ce problème consiste à définir une interface qui résume les attributs communs de ces tableaux/tranches :

package main

import "fmt"

type List interface {
    At(i int) interface{}
    Len() int
}

func printItems(header string, items List) {
    for i := 0; i < items.Len(); i++ {
        fmt.Print(items.At(i), " ")
    }
    fmt.Println()
}

type IntList []int
type FloatList []float64

func (il IntList)   At(i int) interface{} { return il[i] }
func (fl FloatList) At(i int) interface{} { return fl[i] }

func (il IntList)   Len() int { return len(il) }
func (fl FloatList) Len() int { return len(fl) }

func main() {
    var iarr = []int{1, 2, 3}
    var farr = []float64{1.0, 2.0, 3.0}
    printItems("Integer array:", IntList(iarr))
    printItems("Float array:", FloatList(farr))
}
Copier après la connexion

En encapsulant le comportement de ces collections dans une interface, vous pouvez y accéder et les manipuler de manière générique. Cette approche reste idiomatique dans Go tout en offrant la flexibilité nécessaire à la gestion de différents types de données.

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