mnogu / go-dig

Go version of Hash#dig and Array#dig in Ruby

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

go-dig

PkgGoDev GitHub Actions

Go version of Hash#dig and Array#dig in Ruby

Download and Install

$ go get -u github.com/mnogu/go-dig

Examples

package main

import (
	"encoding/json"
	"fmt"

	"github.com/mnogu/go-dig"
)

func main() {
	var jsonBlob = []byte(`{"foo": {"bar": {"baz": 1}}}`)
	var v interface{}
	if err := json.Unmarshal(jsonBlob, &v); err != nil {
		fmt.Println(err)
	}
	success, err := dig.Dig(v, "foo", "bar", "baz")
	if err != nil {
		fmt.Println(err)
	}
	// foo.bar.baz = 1
	fmt.Println("foo.bar.baz =", success)

	failure, err := dig.Dig(v, "foo", "qux", "quux")
	if err != nil {
		// key qux not found in <nil>
		fmt.Println(err)
	}
	// foo.qux.quux = <nil>
	fmt.Println("foo.qux.quux =", failure)
}
package main

import (
	"encoding/json"
	"fmt"

	"github.com/mnogu/go-dig"
)

func main() {
	var jsonBlob = []byte(`{"foo": [10, 11, 12]}`)
	var v interface{}
	if err := json.Unmarshal(jsonBlob, &v); err != nil {
		fmt.Println(err)
	}
	success, err := dig.Dig(v, "foo", 1)
	if err != nil {
		fmt.Println(err)
	}
	// foo.1 = 11
	fmt.Println("foo.1 =", success)

	failure, err := dig.Dig(v, "foo", 1, 0)
	if err != nil {
		// 11 isn't a slice
		fmt.Println(err)
	}
	// foo.1.0 = <nil>
	fmt.Println("foo.1.0 =", failure)

	failure2, err := dig.Dig(v, "foo", "bar")
	if err != nil {
		// [10 11 12] isn't a map
		fmt.Println(err)
	}
	// foo.bar = <nil>
	fmt.Println("foo.bar =", failure2)
}

About

Go version of Hash#dig and Array#dig in Ruby

License:MIT License


Languages

Language:Go 100.0%