code: func walk(obj interface{}, fn visitor) error {
  	v := reflect.ValueOf(obj).Elem()
  	t := v.Type()
  	return visit("", v, t, fn)
  }
docs: // walk finds all the string elements of a given structure (and its sub-
  // structures) and calls the visitor function. Each string found will get
  // a unique path computed. If any visitor returns an error then the search
  // will stop and that error will be returned.