<!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://archive.apache.org/dist/calcite/apache-calcite-avatica-go-4.0.0/apache-calcite-avatica-go-4.0.0-src.tar.gz">tar</a> (<a href="https://archive.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://archive.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>
