code: func NewUntar(r io.Reader, targetDir string) *Untar {
  	u := &Untar{
  		source:              r,
  		target:              targetDir,
  		PreservePermissions: true,
  		PreserveOwners:      false,
  		AbsoluteRoot:        "/",
  		resolvedLinks:       make([]resolvedLink, 0),
  		OwnerMappingFunc:    defaultMappingFunc,
  		GroupMappingFunc:    defaultMappingFunc,
  	}
  
  	// loop up the current user for mapping of files
  	// only do it if err != nil
  	if usr, err := user.Current(); err != nil {
  		if usr == nil {
  			u.MappedUserID = 500
  			u.MappedGroupID = 500
  		} else {
  			if u.MappedUserID, err = strconv.Atoi(usr.Uid); err != nil {
  				u.MappedUserID = 500
  			}
  			if u.MappedGroupID, err = strconv.Atoi(usr.Gid); err != nil {
  				u.MappedGroupID = 500
  			}
  		}
  	} else {
  		u.MappedUserID = 500
  		u.MappedGroupID = 500
  	}
  
  	return u
  }
docs: // NewUntar returns an Untar to use to extract the contents of r into targetDir.
  // Extraction is handled by Extract().