<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title>Avatica Go Client Downloads</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <meta name="generator" content="Jekyll v3.7.3">
  <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
  <link rel="stylesheet" href="/avatica/css/screen.css">
  <link rel="icon" type="image/x-icon" href="/avatica/favicon.ico">
  <!--[if lt IE 9]>
  <script src="/js/html5shiv.min.js"></script>
  <script src="/js/respond.min.js"></script>
  <![endif]-->
</head>


<body class="wrap">
  <header role="banner">
  <nav class="mobile-nav show-on-mobiles">
    <ul>
  <li class="">
    <a href="/avatica/">Home</a>
  </li>
  <li class="current">
    <a href="/avatica/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/avatica/community/">Community</a>
  </li>
  <li class="">
    <a href="/avatica/develop/">Develop</a>
  </li>
  <li class="">
    <a href="/avatica/news/">News</a>
  </li>
  <li class="">
    <a href="/avatica/docs/">Docs</a>
  </li>
</ul>

  </nav>
  <div class="grid">
    <div class="unit one-third center-on-mobiles">
      <h1>
        <a href="/avatica/">
          <span class="sr-only">Apache Calcite Avatica</span>
          <img src="/avatica/img/logo.png" width="226" height="140" alt="Calcite Logo">
        </a>
      </h1>
    </div>
    <nav class="main-nav unit two-thirds hide-on-mobiles">
      <ul>
  <li class="">
    <a href="/avatica/">Home</a>
  </li>
  <li class="current">
    <a href="/avatica/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/avatica/community/">Community</a>
  </li>
  <li class="">
    <a href="/avatica/develop/">Develop</a>
  </li>
  <li class="">
    <a href="/avatica/news/">News</a>
  </li>
  <li class="">
    <a href="/avatica/docs/">Docs</a>
  </li>
</ul>

    </nav>
  </div>
</header>


  <section class="standalone">
  <div class="grid">

    <div class="unit whole">
      <article>
        <h1>Avatica Go Client Downloads</h1>
        <!--

-->

<h2 id="source-releases">Source releases</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Release</th>
      <th style="text-align: left">Date</th>
      <th style="text-align: left">Commit</th>
      <th style="text-align: left">Download</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><a href="/avatica/docs/go_history.html#v4-0-0">4.0.0</a></td>
      <td style="text-align: left">16 May 2019</td>
      <td style="text-align: left"><a href="https://github.com/apache/calcite-avatica-go/commit/3790ef5">3790ef5</a></td>
      <td style="text-align: left"><a href="https://www.apache.org/dyn/closer.lua?filename=calcite/apache-calcite-avatica-go-4.0.0/apache-calcite-avatica-go-4.0.0-src.tar.gz&amp;action=download">tar</a> (<a href="https://www.apache.org/dist/calcite/apache-calcite-avatica-go-4.0.0/apache-calcite-avatica-go-4.0.0-src.tar.gz.sha512">sha512</a> <a href="https://www.apache.org/dist/calcite/apache-calcite-avatica-go-4.0.0/apache-calcite-avatica-go-4.0.0-src.tar.gz.asc">pgp</a>)</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="/avatica/docs/go_history.html#v3-2-0">3.2.0</a></td>
      <td style="text-align: left">18 Sep 2018</td>
      <td style="text-align: left"><a href="https://github.com/apache/calcite-avatica-go/commit/0a166d5">0a166d5</a></td>
      <td style="text-align: left"><a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.2.0/apache-calcite-avatica-go-3.2.0-src.tar.gz">tar</a> (<a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.2.0/apache-calcite-avatica-go-3.2.0-src.tar.gz.sha256">sha256</a> <a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.2.0/apache-calcite-avatica-go-3.2.0-src.tar.gz.asc">pgp</a>)</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="/avatica/docs/go_history.html#v3-1-0">3.1.0</a></td>
      <td style="text-align: left">10 Sep 2018</td>
      <td style="text-align: left"><a href="https://github.com/apache/calcite-avatica-go/commit/0e1ae23">0e1ae23</a></td>
      <td style="text-align: left"><a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.1.0/apache-calcite-avatica-go-src-3.1.0.tar.gz">tar</a> (<a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.1.0/apache-calcite-avatica-go-src-3.1.0.tar.gz.sha256">sha256</a> <a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.1.0/apache-calcite-avatica-go-src-3.1.0.tar.gz.asc">pgp</a>)</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="/avatica/docs/go_history.html#v3-0-0">3.0.0</a></td>
      <td style="text-align: left">27 Apr 2018</td>
      <td style="text-align: left"><a href="https://github.com/apache/calcite-avatica-go/commit/273c53f">273c53f</a></td>
      <td style="text-align: left"><a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.0.0/apache-calcite-avatica-go-src-3.0.0.tar.gz">tar</a> (<a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.0.0/apache-calcite-avatica-go-src-3.0.0.tar.gz.sha256">sha256</a> <a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.0.0/apache-calcite-avatica-go-src-3.0.0.tar.gz.asc">pgp</a>) <br /> <a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.0.0/apache-calcite-avatica-go-src-3.0.0.zip">zip</a> (<a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.0.0/apache-calcite-avatica-go-src-3.0.0.zip.sha256">sha256</a> <a href="https://archive.apache.org/dist/calcite/apache-calcite-avatica-go-3.0.0/apache-calcite-avatica-go-src-3.0.0.zip.asc">pgp</a>)</td>
    </tr>
  </tbody>
</table>

<p>Choose a source distribution in either <em>tar</em> or <em>zip</em> format.</p>

<p>For fast downloads, current source distributions are hosted on mirror servers;
older source distributions are in the
<a href="https://archive.apache.org/dist/calcite/">archive</a>.
If a download from a mirror fails, retry, and the second download will likely
succeed.</p>

<p>For security, hash and signature files are always hosted at
<a href="https://www.apache.org/dist">Apache</a>.</p>

<h2 id="verify-the-integrity-of-the-files">Verify the integrity of the files</h2>

<p>You must verify the integrity of the downloaded file using the PGP signature (.asc file) or a hash (.sha256, .md5 for older
releases). For more information why this must be done, please read <a href="https://www.apache.org/info/verification.html">Verifying Apache Software Foundation Releases</a>.</p>

<p>To verify the signature using GPG or PGP, please do the following:</p>

<ol>
  <li>Download the release artifact and the corresponding PGP signature from the table above.</li>
  <li>Download the <a href="https://www.apache.org/dist/calcite/KEYS">Apache Calcite KEYS</a> file.</li>
  <li>Import the KEYS file and verify the downloaded artifact using one of the following methods:</li>
</ol>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">% gpg <span class="nt">--import</span> KEYS
% gpg <span class="nt">--verify</span> downloaded_file.asc downloaded_file</code></pre></figure>

<p>or</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">% pgpk <span class="nt">-a</span> KEYS
% pgpv downloaded_file.asc</code></pre></figure>

<p>or</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">% pgp <span class="nt">-ka</span> KEYS
% pgp downloaded_file.asc</code></pre></figure>

      </article>
    </div>

    <div class="clear"></div>

  </div>
</section>


  <footer role="contentinfo">
  <div id="poweredby">
    <a href="http://www.apache.org/">
      <span class="sr-only">Apache</span>
      <img src="/avatica/img/feather.png" width="190" height="77" alt="Apache Logo"></a>
  </div>
  <div id="copyright">
  <p>The contents of this website are &copy;&nbsp;2019
     <a href="https://www.apache.org/">Apache Software Foundation</a>
     under the terms of
     the <a href="https://www.apache.org/licenses/LICENSE-2.0.html">
     Apache&nbsp;License&nbsp;v2</a>. Apache Calcite and its logo are
     trademarks of the Apache Software Foundation.</p>
  </div>
</footer>

  <script>
  var anchorForId = function (id) {
    var anchor = document.createElement("a");
    anchor.className = "header-link";
    anchor.href      = "#" + id;
    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
    anchor.title = "Permalink";
    return anchor;
  };

  var linkifyAnchors = function (level, containingElement) {
    var headers = containingElement.getElementsByTagName("h" + level);
    for (var h = 0; h < headers.length; h++) {
      var header = headers[h];

      if (typeof header.id !== "undefined" && header.id !== "") {
        header.appendChild(anchorForId(header.id));
      }
    }
  };

  document.onreadystatechange = function () {
    if (this.readyState === "complete") {
      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
      if (!contentBlock) {
        return;
      }
      for (var level = 1; level <= 6; level++) {
        linkifyAnchors(level, contentBlock);
      }
    }
  };
</script>


</body>
</html>
