code: func Flatten(i interface{}) []string {
  	var res []string
  	flatten("", &res, reflect.ValueOf(i))
  	return res
  }
docs: // `flatten` recursively retrieves every leaf node in a struct in depth-first fashion
  // and aggregate the results into given string slice with format: "path.to.leaf = value"
  // in the order of definition. Root name is ignored in the path. This helper function is
  // useful to pretty-print a struct, such as configs.
  // for example, given data structure:
  // A{
  //   B{
  //     C: "foo",
  //     D: 42,
  //   },
  //   E: nil,
  // }
  // it should yield a slice of string containing following items:
  // [
  //   "B.C = \"foo\"",
  //   "B.D = 42",
  //   "E =",
  // ]