Go
The Go SDK for the GitHub REST API, generated from the same spec as the other nine.
Get the source
gh repo clone octri-dev/github-go-showcase-sdkThe repository's README lists the toolchain and build commands for Go. Open it on GitHub.
Quickstart
package main
import (
"context"
"fmt"
sdk "github.com/octri-dev/github-go"
)
func main() {
ctx := context.Background()
config := sdk.ClientConfig{
BaseURL: "https://api.github.com",
}
client := sdk.NewGitHubV3REST(config)
result, err := client.Search.Labels(ctx, sdk.SearchLabelsParams{RepositoryId: 1, Q: "q"})
if err != nil {
panic(err)
}
fmt.Printf("%d items\n", len(result.Items))
}Authentication
This build does not declare an authentication scheme. If the service requires a custom credential, set it through ClientAuthConfig.Headers; those headers are merged into every request.
Client behavior
- Base URL:
https://api.github.com. - Transport: net/http.
- Timeout: 600,000 ms per attempt.
- Retries: up to 3 attempts for status codes
408,409,429,500,502,503,504, with 500-8,000 ms backoff. - Idempotency: enabled for
POST,PATCHusingIdempotency-Key. - Error telemetry: off. This build has no reporting endpoint and sends no error reports.
High-level operation methods return the typed response body directly. The low-level request layer returns an SdkResponse<T> envelope containing data, status, headers, request ID, latency, and attempt count.
Errors
All failure paths use a small, predictable hierarchy:
| Error | Meaning |
|---|---|
SdkValidationError | A request argument failed an OpenAPI constraint before network I/O. |
SdkHttpError | The server returned a non-2xx response. |
SdkNetworkError | DNS, connection, TLS, or socket failure. |
SdkTimeoutError | The configured per-attempt timeout elapsed. |
HTTP errors expose StatusCode, the response body and headers, plus RequestID when the server supplies one. Preserve the request ID in support logs; it is the fastest way to correlate a failed SDK call with server-side traces.
Match common statuses with errors.Is(err, ErrNotFound) against the sentinels ErrBadRequest (400), ErrUnauthorized (401), ErrPermissionDenied (403), ErrNotFound (404), ErrConflict (409), ErrUnprocessableEntity (422), ErrRateLimit (429), ErrInternalServer (any 5xx).
When the API declares a model for an error response, the SDK decodes the body into it as httpErr.Data, an ErrorBody to narrow with a type switch (a model declared as a type alias, such as a list, stays in the raw body). It is empty when the status declares no model or the body does not fit one. The raw body stays on the error either way, and DecodeErrorBody[ErrorModel](httpErr) decodes it into any ErrorModel by hand.