mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-27 19:00:35 +00:00
72 lines
2.3 KiB
Go
72 lines
2.3 KiB
Go
// objx - Go package for dealing with maps, slices, JSON and other data.
|
|
//
|
|
// Overview
|
|
//
|
|
// Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes
|
|
// a powerful `Get` method (among others) that allows you to easily and quickly get
|
|
// access to data within the map, without having to worry too much about type assertions,
|
|
// missing data, default values etc.
|
|
//
|
|
// Pattern
|
|
//
|
|
// Objx uses a preditable pattern to make access data from within `map[string]interface{}'s
|
|
// easy.
|
|
//
|
|
// Call one of the `objx.` functions to create your `objx.Map` to get going:
|
|
//
|
|
// m, err := objx.FromJSON(json)
|
|
//
|
|
// NOTE: Any methods or functions with the `Must` prefix will panic if something goes wrong,
|
|
// the rest will be optimistic and try to figure things out without panicking.
|
|
//
|
|
// Use `Get` to access the value you're interested in. You can use dot and array
|
|
// notation too:
|
|
//
|
|
// m.Get("places[0].latlng")
|
|
//
|
|
// Once you have saught the `Value` you're interested in, you can use the `Is*` methods
|
|
// to determine its type.
|
|
//
|
|
// if m.Get("code").IsStr() { /* ... */ }
|
|
//
|
|
// Or you can just assume the type, and use one of the strong type methods to
|
|
// extract the real value:
|
|
//
|
|
// m.Get("code").Int()
|
|
//
|
|
// If there's no value there (or if it's the wrong type) then a default value
|
|
// will be returned, or you can be explicit about the default value.
|
|
//
|
|
// Get("code").Int(-1)
|
|
//
|
|
// If you're dealing with a slice of data as a value, Objx provides many useful
|
|
// methods for iterating, manipulating and selecting that data. You can find out more
|
|
// by exploring the index below.
|
|
//
|
|
// Reading data
|
|
//
|
|
// A simple example of how to use Objx:
|
|
//
|
|
// // use MustFromJSON to make an objx.Map from some JSON
|
|
// m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`)
|
|
//
|
|
// // get the details
|
|
// name := m.Get("name").Str()
|
|
// age := m.Get("age").Int()
|
|
//
|
|
// // get their nickname (or use their name if they
|
|
// // don't have one)
|
|
// nickname := m.Get("nickname").Str(name)
|
|
//
|
|
// Ranging
|
|
//
|
|
// Since `objx.Map` is a `map[string]interface{}` you can treat it as such. For
|
|
// example, to `range` the data, do what you would expect:
|
|
//
|
|
// m := objx.MustFromJSON(json)
|
|
// for key, value := range m {
|
|
//
|
|
// /* ... do your magic ... */
|
|
//
|
|
// }
|
|
package objx
|