code: func Clone(s interface{}) (interface{}, error) {
  	sv, err := structValue(s)
  	if err != nil {
  		return nil, err
  	}
  
  	// figure out target type
  	st := deepTypeOf(sv)
  
  	// create a target type
  	dv := reflect.New(st)
  
  	// apply copy to target
  	doCopy(dv, sv)
  
  	return dv.Interface(), nil
  }
docs: // Clone method creates a clone of given `struct` object. As you know go-model does, deep processing.
  // So all field values you get in the result.
  //
  // 		Example:
  // 		input := SampleStruct { /* input struct field values go here */ }
  //
  // 		clonedObj := model.Clone(input)
  //
  // 		fmt.Printf("\nCloned Object: %#v\n", clonedObj)
  //
  // Note:
  // [1] Two dimensional slice type is not supported yet.
  //
  // A "model" tag with the value of "-" is ignored by library for processing.
  // 		Example:
  //
  // 		// Field is ignored while processing
  // 		BookCount	int	`model:"-"`
  // 		BookCode	string	`model:"-"`
  //
  // A "model" tag value with the option of "omitempty"; library will not clone those values
  // into result struct object.
  // 		Example:
  //
  // 		// Field is not cloned into 'result' if it's empty/zero value
  // 		ArchiveInfo	BookArchive	`model:"archiveInfo,omitempty"`
  // 		Region		BookLocale	`model:",omitempty,notraverse"`
  //
  // A "model" tag value with the option of "notraverse"; library will not traverse
  // inside the struct object. However, the field value will be evaluated whether
  // it's zero value or not, and then cloned to the result accordingly.
  // 		Example:
  //
  // 		// Field is not traversed but value is evaluated/processed
  // 		ArchiveInfo	BookArchive	`model:"archiveInfo,notraverse"`
  // 		Region		BookLocale	`model:",notraverse"`
  //