code: func (r *Repository) Tags() (storer.ReferenceIter, error) {
  	refIter, err := r.Storer.IterReferences()
  	if err != nil {
  		return nil, err
  	}
  
  	return storer.NewReferenceFilteredIter(
  		func(r *plumbing.Reference) bool {
  			return r.Name().IsTag()
  		}, refIter), nil
  }
docs: // Tags returns all the tag References in a repository.
  //
  // If you want to check to see if the tag is an annotated tag, you can call
  // TagObject on the hash Reference passed in through ForEach:
  //
  //   iter, err := r.Tags()
  //   if err != nil {
  //     // Handle error
  //   }
  //
  //   if err := iter.ForEach(func (ref *plumbing.Reference) error {
  //     obj, err := r.TagObject(ref.Hash())
  //     switch err {
  //     case nil:
  //       // Tag object present
  //     case plumbing.ErrObjectNotFound:
  //       // Not a tag object
  //     default:
  //       // Some other error
  //       return err
  //     }
  //   }); err != nil {
  //     // Handle outer iterator error
  //   }
  //