mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-18 12:59:31 +00:00
``` $ gvt fetch -tag v1.1.0 github.com/weaveworks/promrus 2017/10/08 XX:XX:XX Fetching: github.com/weaveworks/promrus 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/julienschmidt/httprouter 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/go-kit/kit/log 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/go-stack/stack 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/go-logfmt/logfmt 2017/10/08 XX:XX:XX ··· Fetching recursive dependency: github.com/kr/logfmt 2017/10/08 XX:XX:XX · Skipping (existing): gopkg.in/yaml.v2 2017/10/08 XX:XX:XX · Fetching recursive dependency: gopkg.in/alecthomas/kingpin.v2 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/alecthomas/units 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/alecthomas/template 2017/10/08 XX:XX:XX · Skipping (existing): golang.org/x/net/context/ctxhttp 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/stretchr/objx 2017/10/08 XX:XX:XX · Skipping (existing): golang.org/x/net/context 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/pkg/errors ```
73 lines
2.3 KiB
Go
73 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
|