func (s *IssuesService) Get(ctx context.Context, owner string, repo string, number int) (*Issue, *Response, error) {
	u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number)
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}
	acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
	req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
	issue := new(Issue)
	resp, err := s.client.Do(ctx, req, issue)
	if err != nil {
		return nil, resp, err
	}
	return issue, resp, nil
}
Get a single issue.

GitHub API docs: https://developer.github.com/v3/issues/#get-a-single-issue
package github
import (
	"context"
	"fmt"
	"strings"
	"time"
)
type IssuesService service
type Issue struct {
	ID               *int64            `json:"id,omitempty"`
	Number           *int              `json:"number,omitempty"`
	State            *string           `json:"state,omitempty"`
	Locked           *bool             `json:"locked,omitempty"`
	Title            *string           `json:"title,omitempty"`
	Body             *string           `json:"body,omitempty"`
	User             *User             `json:"user,omitempty"`
	Labels           []Label           `json:"labels,omitempty"`
	Assignee         *User             `json:"assignee,omitempty"`
	Comments         *int              `json:"comments,omitempty"`
	ClosedAt         *time.Time        `json:"closed_at,omitempty"`
	CreatedAt        *time.Time        `json:"created_at,omitempty"`
	UpdatedAt        *time.Time        `json:"updated_at,omitempty"`
	ClosedBy         *User             `json:"closed_by,omitempty"`
	URL              *string           `json:"url,omitempty"`
	HTMLURL          *string           `json:"html_url,omitempty"`
	CommentsURL      *string           `json:"comments_url,omitempty"`
	EventsURL        *string           `json:"events_url,omitempty"`
	LabelsURL        *string           `json:"labels_url,omitempty"`
	RepositoryURL    *string           `json:"repository_url,omitempty"`
	Milestone        *Milestone        `json:"milestone,omitempty"`
	PullRequestLinks *PullRequestLinks `json:"pull_request,omitempty"`
	Repository       *Repository       `json:"repository,omitempty"`
	Reactions        *Reactions        `json:"reactions,omitempty"`
	Assignees        []*User           `json:"assignees,omitempty"`
	NodeID           *string           `json:"node_id,omitempty"`
	TextMatches []TextMatch `json:"text_matches,omitempty"`
	ActiveLockReason *string `json:"active_lock_reason,omitempty"`
}
func (i Issue) String() string {
	return Stringify(i)
}
func (i Issue) IsPullRequest() bool {
	return i.PullRequestLinks != nil
}
type IssueRequest struct {
	Title     *string   `json:"title,omitempty"`
	Body      *string   `json:"body,omitempty"`
	Labels    *[]string `json:"labels,omitempty"`
	Assignee  *string   `json:"assignee,omitempty"`
	State     *string   `json:"state,omitempty"`
	Milestone *int      `json:"milestone,omitempty"`
	Assignees *[]string `json:"assignees,omitempty"`
}
type IssueListOptions struct {
	Filter string `url:"filter,omitempty"`
	State string `url:"state,omitempty"`
	Labels []string `url:"labels,comma,omitempty"`
	Sort string `url:"sort,omitempty"`
	Direction string `url:"direction,omitempty"`
	Since time.Time `url:"since,omitempty"`
	ListOptions
}
type PullRequestLinks struct {
	URL      *string `json:"url,omitempty"`
	HTMLURL  *string `json:"html_url,omitempty"`
	DiffURL  *string `json:"diff_url,omitempty"`
	PatchURL *string `json:"patch_url,omitempty"`
}
func (s *IssuesService) List(ctx context.Context, all bool, opt *IssueListOptions) ([]*Issue, *Response, error) {
	var u string
	if all {
		u = "issues"
	} else {
		u = "user/issues"
	}
	return s.listIssues(ctx, u, opt)
}
func (s *IssuesService) ListByOrg(ctx context.Context, org string, opt *IssueListOptions) ([]*Issue, *Response, error) {
	u := fmt.Sprintf("orgs/%v/issues", org)
	return s.listIssues(ctx, u, opt)
}
func (s *IssuesService) listIssues(ctx context.Context, u string, opt *IssueListOptions) ([]*Issue, *Response, error) {
	u, err := addOptions(u, opt)
	if err != nil {
		return nil, nil, err
	}
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}
	acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLabelDescriptionSearchPreview, mediaTypeLockReasonPreview}
	req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
	var issues []*Issue
	resp, err := s.client.Do(ctx, req, &issues)
	if err != nil {
		return nil, resp, err
	}
	return issues, resp, nil
}
type IssueListByRepoOptions struct {
	Milestone string `url:"milestone,omitempty"`
	State string `url:"state,omitempty"`
	Assignee string `url:"assignee,omitempty"`
	Creator string `url:"creator,omitempty"`
	Mentioned string `url:"mentioned,omitempty"`
	Labels []string `url:"labels,omitempty,comma"`
	Sort string `url:"sort,omitempty"`
	Direction string `url:"direction,omitempty"`
	Since time.Time `url:"since,omitempty"`
	ListOptions
}
func (s *IssuesService) ListByRepo(ctx context.Context, owner string, repo string, opt *IssueListByRepoOptions) ([]*Issue, *Response, error) {
	u := fmt.Sprintf("repos/%v/%v/issues", owner, repo)
	u, err := addOptions(u, opt)
	if err != nil {
		return nil, nil, err
	}
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}
	acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeLabelDescriptionSearchPreview, mediaTypeIntegrationPreview}
	req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
	var issues []*Issue
	resp, err := s.client.Do(ctx, req, &issues)
	if err != nil {
		return nil, resp, err
	}
	return issues, resp, nil
}