func (s *TagsService) GetTag(pid interface{}, tag string, options ...OptionFunc) (*Tag, *Response, error) {
	project, err := parseID(pid)
	if err != nil {
		return nil, nil, err
	}
	u := fmt.Sprintf("projects/%s/repository/tags/%s", url.QueryEscape(project), tag)
	req, err := s.client.NewRequest("GET", u, nil, options)
	if err != nil {
		return nil, nil, err
	}
	var t *Tag
	resp, err := s.client.Do(req, &t)
	if err != nil {
		return nil, resp, err
	}
	return t, resp, err
}
GetTag a specific repository tag determined by its name. It returns 200 together
with the tag information if the tag exists. It returns 404 if the tag does not exist.

GitLab API docs:
https://docs.gitlab.com/ce/api/tags.html#get-a-single-repository-tag
package gitlab
import (
	"fmt"
	"net/url"
)
type TagsService struct {
	client *Client
}
type Tag struct {
	Commit  *Commit `json:"commit"`
	Release struct {
		TagName     string `json:"tag_name"`
		Description string `json:"description"`
	} `json:"release"`
	Name    string `json:"name"`
	Message string `json:"message"`
}
func (t Tag) String() string {
	return Stringify(t)
}
func (s *TagsService) ListTags(pid interface{}, options ...OptionFunc) ([]*Tag, *Response, error) {
	project, err := parseID(pid)
	if err != nil {
		return nil, nil, err
	}
	u := fmt.Sprintf("projects/%s/repository/tags", url.QueryEscape(project))
	req, err := s.client.NewRequest("GET", u, nil, options)
	if err != nil {
		return nil, nil, err
	}
	var t []*Tag
	resp, err := s.client.Do(req, &t)
	if err != nil {
		return nil, resp, err
	}
	return t, resp, err
}