﻿---
title: Go
description: This is the official Go client for Elasticsearch. Full documentation is hosted at GitHub and PkgGoDev. This documentation provides only an overview of...
url: https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go
products:
  - Elasticsearch
  - Elasticsearch Client
  - Elasticsearch Go Client
---

# Go
This is the official Go client for Elasticsearch.
Full documentation is hosted at [GitHub](https://github.com/elastic/go-elasticsearch) and [PkgGoDev](https://pkg.go.dev/github.com/elastic/go-elasticsearch). This documentation provides only an overview of features.

## Features

- One-to-one mapping with REST API.
- Generalized, pluggable architecture.
- Two API styles: [low-level](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/using-the-api) and [fully typed](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/typed-api).
- [Fluent DSL builders](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/typed-api/esdsl) for constructing queries, aggregations, mappings, and sort options.
- Built-in [OpenTelemetry instrumentation](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/advanced/observability) for distributed tracing.
- [Interceptors](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/advanced/interceptors) for custom middleware (auth rotation, observability, etc.).
- Automatic retries, request compression, and node discovery.
- Helpers for convenience ([bulk indexing](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/using-the-api/bulk-indexing), JSON encoding, and more).
- Rich set of examples.


## Architecture

The client has a layered architecture where both the low-level and typed APIs share the same transport infrastructure:
```mermaid
graph LR
    App["Your Application"]
    TC["TypedClient / Client"]
    INT["Interceptors"]
    TP["Transport"]
    ES["Elasticsearch"]

    App --> TC
    TC --> INT
    INT --> TP
    TP --> ES
```

The **transport layer** handles retry logic, request compression, node selection (round-robin), and connection pooling. **Interceptors** are optional middleware that can modify requests and responses (e.g., for dynamic authentication or custom logging). See the [Configuration reference](https://www.elastic.co/elastic/docs-builder/docs/3016/reference/elasticsearch/clients/go/configuration) for all available options.

## Usage

<tab-set>
  <tab-item title="Low-level API">
    ```go
    package main

    import (
        "context"
        "log"

        "github.com/elastic/go-elasticsearch/v9"
    )

    func main() {
        es, _ := elasticsearch.NewDefaultClient()
        defer es.Close(context.Background())

        res, err := es.Info()
        if err != nil {
            log.Fatal(err)
        }
        defer res.Body.Close()

        log.Println(res)
    }
    ```
  </tab-item>

  <tab-item title="Fully-typed API">
    ```go
    package main

    import (
        "context"
        "log"

        "github.com/elastic/go-elasticsearch/v9"
    )

    func main() {
        es, _ := elasticsearch.NewTypedClient(elasticsearch.Config{
            Addresses: []string{"http://localhost:9200"},
        })
        defer es.Close(context.Background())
        log.Println(es.Info().Do(context.Background()))
    }
    ```
  </tab-item>
</tab-set>

<note>
  Please have a look at the collection of comprehensive examples in the repository at .
</note>


## Resources

- [Source Code](https://github.com/elastic/go-elasticsearch)
- [API Documentation](https://pkg.go.dev/github.com/elastic/go-elasticsearch)
- [Examples and Recipes](https://github.com/elastic/go-elasticsearch/tree/main/_examples)

<dropdown title="License">
  Copyright 2019 Elasticsearch.Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
  ```text
  http://www.apache.org/licenses/LICENSE-2.0
  ```
  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
</dropdown>