Maison > développement back-end > Golang > le corps du texte

golang : tableaux json qui ont également des méthodes

WBOY
Libérer: 2024-02-09 10:15:18
avant
1224 Les gens l'ont consulté

golang:也有方法的 json 数组

L'éditeur PHP Youzi vous propose un article sur Golang, le sujet est "golang : des tableaux json qui ont aussi des méthodes". Golang est un langage de programmation simple et efficace, et le tableau json est l'un des formats de données couramment utilisés. Cet article explorera comment opérer sur les tableaux json dans Golang et présentera quelques méthodes utiles. Que vous soyez débutant ou développeur expérimenté, cet article peut vous fournir de précieuses informations et conseils. Découvrons-le ensemble !

Contenu de la question

J'ai une structure de données comme celle-ci :

type (
  parent struct {
    items []*child
  }
  child struct {
    field string `json:"field"`
  }
)
Copier après la connexion

J'espère aussi parent qu'il existe un moyen :

func (p *parent) example() { }
Copier après la connexion

Mais l'exigence de json est que le parent soit juste un tableau :

[
  {
    "field": "data"
  }
]
Copier après la connexion

Je veux que parent 是一个简单的数组,但为了让 parent soit un simple tableau, mais pour que

ait des méthodes, il ne peut pas s'agir d'un type de tableau.

Existe-t-il un moyen de résoudre ces deux problèmes avec une seule structure de données ?

greatgrandparent包含[]grandparent,而grandparent有一个包含parentparent(Pour compliquer les choses, la structure de données réelle que je dois utiliser comporte deux niveaux : arrière-grand-parent contient []grand-parent et grand-parent. est un

contenant

. Le tableau est défini en externe et je veux que chacune des quatre structures ait des méthodes)

Solution de contournement

Pour que le parent ait des méthodes, il ne peut pas être de type Array. C'est possible, il doit juste avoir un

nom

, puisque seuls les types nommés (ou les pointeurs vers des types nommés) peuvent implémenter des méthodes. Voici le code go valide :

type parent []*child

func (p parent) example() { /* ... */ }
Copier après la connexion
parentNotez que ce qui précède

est une tranche et non un tableau. Les tableaux en go ont une longueur statique, vous ne pouvez pas les augmenter ni les réduire, les tranches par contre ont une longueur dynamique, vous pouvez les redimensionner à volonté. Les tableaux et les tranches sont étroitement liés, mais pas identiques.

json.unmarshaler/json.marshaler

Une autre façon consiste à demander au type struct d'implémenter l'interface

 :

type parent struct { Items []*child }

func (p *parent) UnmarshalJSON(data []byte) error {
    return json.Unmarshal(data, &p.Items)
}

func (p parent) MarshalJSON() ([]byte, error) {
    return json.Marshal(p.Items)
}
Copier après la connexion
🎜Ce qui précède générera la structure json requise. 🎜

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!