php Xiaobian Yuzi brings you an article about Golang, the theme is "golang: json arrays that also have methods". Golang is a simple and efficient programming language, and json array is one of the commonly used data formats. This article will explore how to operate on json arrays in Golang and introduce some useful methods. Whether you are a beginner or an experienced developer, this article can provide you with some valuable information and tips. Let’s find out together!
I have a data structure like this:
type ( parent struct { items []*child } child struct { field string `json:"field"` } )
I also hope parent
has a way:
func (p *parent) example() { }
But the json requirement is that the parent is just an array:
[ { "field": "data" } ]
I want parent
to be a simple array, but in order for parent
to have methods, it cannot be of array type.
Is there a way to solve these two problems with one data structure?
(To make things more complicated, the actual data structure I have to use has two levels: greatgrandparent
contains []grandparent
, while grandparent
has A parent
containing parent
. The json structure is defined externally, the array has no key names, and I want methods for each of the four structures.)
In order for the parent to have methods, it cannot be an array type.
It can, it just has to have a name because only named types (or pointers to named types) can implement methods. The following is valid go code:
type parent []*child func (p parent) example() { /* ... */ }
Note that the above parent
is a slice rather than an array. Arrays in go have static length, you can't increase them and you can't shrink them, slices on the other hand have dynamic length, you can resize them at will. Arrays and slices are closely related, but not the same.
Another way is to have the structure type implement the json.unmarshaler
/json.marshaler
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) }
The above will generate the required json structure.
The above is the detailed content of golang: json arrays that also have methods. For more information, please follow other related articles on the PHP Chinese website!