Maison >développement back-end >Golang >Les tableaux `interface{}` de Go peuvent-ils contenir directement des tableaux Struct ?

Les tableaux `interface{}` de Go peuvent-ils contenir directement des tableaux Struct ?

DDD
DDDoriginal
2024-11-27 12:46:12968parcourir

Can Go's `interface{}` Arrays Directly Hold Struct Arrays?

Attribution de tableaux de structures à des tableaux d'interface dans Go

Dans Go, l'attribution d'un tableau de structures directement à un tableau d'interface génère une erreur de compilation. Pour comprendre pourquoi, examinons les mécanismes sous-jacents.

Interface Storage

interface{} représente un type générique qui peut stocker n'importe quelle valeur. Cependant, il est représenté en interne sous la forme d'une paire de deux mots :

  1. Type de mot : Contient des informations sur le type de données sous-jacent.
  2. Mot de données : Stocke la valeur réelle des données.

Struct Stockage

Contrairement aux interfaces, les structures stockent leurs champs de manière contiguë en mémoire, sans mot de type distinct.

Problème d'affectation

Étant donné que les structures et les interfaces ont des représentations en mémoire différentes, elles ne peut pas être attribué directement. Le système de types garantit cela pour maintenir la sécurité des types.

Solutions de contournement

Pour obtenir le comportement souhaité, envisagez ces options :

Utilisation d'une tranche d'interfaces

Vous pouvez créer une tranche d'interfaces et attribuer les éléments de structure individuellement :

y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}

Stockage d'une interface dans la tranche

Vous pouvez également stocker une interface dans la tranche struct :

var y interface{}
y = x 

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