pointerstructure is a Go library for identifying a specific value within any Go structure using a string syntax.
pointerstructure is based on JSON Pointer (RFC 6901), but reimplemented for Go.
The goal of pointerstructure is to provide a single, well-known format for addressing a specific value. This can be useful for user provided input on structures, diffs of structures, etc.
-
Get the value for an address
-
Set the value for an address within an existing structure.
-
Sorting a list of addresses
Standard go get:
$ go get github.com/mitchellh/pointerstructure
For usage and examples see the Godoc.
A quick code example is shown below:
complex := map[string]interface{}{
"alice": 42,
"bob": []interface{}{
map[string]interface{}{
"name": "Bob",
},
},
}
value, err := pointerstructure.Get(complex, "/bob/0/name")
if err != nil {
panic(err)
}
fmt.Printf("%s", value)
// Output:
// BobContinuing the example above, you can also set values:
value, err = pointerstructure.Set(complex, "/bob/0/name", "Alice")
if err != nil {
panic(err)
}
value, err = pointerstructure.Get(complex, "/bob/0/name")
if err != nil {
panic(err)
}
fmt.Printf("%s", value)
// Output:
// Alice