---
title: "Go"
description: "Go-клиент Wildberries Seller API: модуль github.com/ValeryVerkhoturov/wb-api-client-go, 13 категорий API, маскирование bearer-токена."
lang: ru-RU
source: https://valeryverkhoturov.github.io/wb-api-client-docs/languages/go
---

# Go

Модуль: `github.com/ValeryVerkhoturov/wb-api-client-go` — резолвится из git-тегов [отдельного репозитория](https://github.com/ValeryVerkhoturov/wb-api-client-go).

- **Go:** 1.22+
- **HTTP:** `net/http` (стандартная библиотека)
- **Обёртка секретов:** [`github.com/negrel/secrecy`](https://github.com/negrel/secrecy)

## Установка

```bash
go get github.com/ValeryVerkhoturov/wb-api-client-go@latest
```

Зафиксировать конкретную версию по тегу:

```bash
go get github.com/ValeryVerkhoturov/wb-api-client-go@v1.20260926.0
```

`proxy.golang.org` берёт код прямо из пушнутого тега — отдельный реестр не нужен.

## Почему модуль живёт в отдельном репозитории

В Go принято «один модуль на репозиторий», поэтому клиент лежит в [wb-api-client-go](https://github.com/ValeryVerkhoturov/wb-api-client-go) с `go.mod` в корне. Релизные теги (`vX.Y.Z`) пушатся в этот репозиторий тем же пайплайном, что и в основной — Go подхватывает нужный тег.

Поскольку `MAJOR = 1` зафиксирован (см. [версионирование](https://valeryverkhoturov.github.io/wb-api-client-docs/guides/versioning)), суффикса `/v2` не будет ни сейчас, ни в будущем.

## Форма импортов

По одному Go-пакету на категорию WB API, у каждого свои `Configuration`, `APIClient` и типы `*API`.

```go
import wbitems "github.com/ValeryVerkhoturov/wb-api-client-go/items"
```

Давайте каждому под-модулю алиас (`wbitems`, `wbfbs`, `wbanalytics`, …) — иначе имена конфликтуют: во всех модулях экспортируются одни и те же идентификаторы.

## Под-модули

`general`, `items`, `orders_fbs`, `orders_dbw`, `dbs`, `in_store_pickup`, `orders_fbw`, `promotion`, `communications`, `rates`, `analytics`, `reports`, `finances`.

Структуры `*API` и методы эндпоинтов на модуль перечислены в per-release README: [wb-api-client-go/README.md](https://github.com/ValeryVerkhoturov/wb-api-client-go#readme).

## Авторизация

```go
package main

import (
    "context"
    "fmt"

    wbitems "github.com/ValeryVerkhoturov/wb-api-client-go/items"
)

func main() {
    cfg := wbitems.NewConfiguration()
    cfg.SetAccessToken("<ваш JWT WB>")   // оборачивается в *secrecy.SecretString
    client := wbitems.NewAPIClient(cfg)

    v, _, err := client.DefaultAPI.SomeEndpoint(context.Background()).Execute()
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", v)
}
```

`SetAccessToken` — единственный путь: стандартный для openapi-generator канал `ContextAccessToken` через `context.Value` вырезан, случайно обойти обёртку не получится.

Получить сырое значение обратно:

```go
cfg.AccessToken.ExposeSecret()
```

## Контексты

Каждый вызов принимает `context.Context`. Прокидывайте дедлайн и отмену из своего приложения — клиент их уважает:

```go
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
v, _, err := client.DefaultAPI.SomeEndpoint(ctx).Execute()
```

## Свой HTTP-клиент

Подставьте `*http.Client` для прокси, кастомных таймаутов или транспорт-обёртки:

```go
cfg := wbitems.NewConfiguration()
cfg.HTTPClient = &http.Client{
    Timeout: 60 * time.Second,
    Transport: &http.Transport{
        Proxy: http.ProxyFromEnvironment,
    },
}
```

## Тестирование

Переопределите хост при создании Configuration:

```go
cfg := wbitems.NewConfiguration()
cfg.Host = "localhost:8080"
cfg.Scheme = "http"
```

## См. также

- [Аутентификация](https://valeryverkhoturov.github.io/wb-api-client-docs/guides/authentication)
- [Обработка ошибок](https://valeryverkhoturov.github.io/wb-api-client-docs/guides/error-handling)
- [Полный справочник по модулям на GitHub](https://github.com/ValeryVerkhoturov/wb-api-client-go#readme)

<p align="center">
  <img src="/pics/blueberry-golang-animated.webp" style="height: 200px; width: auto; max-width: 100%; object-fit: contain" alt="wb-api-client mascot">
</p>
