code: func (n *node) Update(data interface{}) error {
  	return n.update(data, func(ref *reflect.Value, current *reflect.Value, cfg *structConfig) error {
  		numfield := ref.NumField()
  		for i := 0; i < numfield; i++ {
  			f := ref.Field(i)
  			if ref.Type().Field(i).PkgPath != "" {
  				continue
  			}
  			zero := reflect.Zero(f.Type()).Interface()
  			actual := f.Interface()
  			if !reflect.DeepEqual(actual, zero) {
  				cf := current.Field(i)
  				cf.Set(f)
  				idxInfo, ok := cfg.Fields[ref.Type().Field(i).Name]
  				if ok {
  					idxInfo.Value = &cf
  				}
  			}
  		}
  		return nil
  	})
  }
docs: // Update a structure