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
Susan Sarandonoriginal
2024-12-18 01:47:10837parcourir

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, "")
}

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

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 <p>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.</p>

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