Maison  >  Article  >  développement back-end  >  golang : tableaux json qui ont également des méthodes

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

WBOY
WBOYavant
2024-02-09 10:15:181227parcourir

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

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

func (p *parent) example() { }

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

[
  {
    "field": "data"
  }
]

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() { /* ... */ }
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)
}
🎜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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer