This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 56498a0e8 chore(go/adbc): bump minimum version to go1.21, update deps 
(#1646)
56498a0e8 is described below

commit 56498a0e8b30f9d3c0ad43de7115fb6767688a02
Author: Matt Topol <[email protected]>
AuthorDate: Wed Mar 27 11:40:24 2024 -0400

    chore(go/adbc): bump minimum version to go1.21, update deps (#1646)
    
    Bumping the minimum go version (via go.mod) to go1.21 and updated
    appropriate indirect dependencies accordingly.
    
    ---------
    
    Co-authored-by: Sutou Kouhei <[email protected]>
---
 .env                                              |  2 +-
 .github/workflows/integration.yml                 | 10 +++-
 .github/workflows/native-unix.yml                 | 31 +++++++----
 .github/workflows/native-windows.yml              | 10 ++--
 .github/workflows/packaging.yml                   |  9 ++--
 .github/workflows/r-check.yml                     |  5 +-
 .pre-commit-config.yaml                           |  2 +-
 ci/conda/meta.yaml                                |  2 +-
 ci/docker/python-wheel-manylinux.dockerfile       |  8 +--
 ci/linux-packages/Rakefile                        | 13 ++++-
 ci/linux-packages/apt/debian-bookworm/Dockerfile  |  3 +-
 ci/linux-packages/apt/debian-bullseye/Dockerfile  | 65 -----------------------
 ci/linux-packages/apt/ubuntu-jammy/Dockerfile     |  2 +-
 ci/linux-packages/debian/control                  |  2 +-
 ci/linux-packages/debian/rules                    |  2 +-
 ci/linux-packages/yum/almalinux-8/Dockerfile      |  8 ++-
 ci/linux-packages/yum/almalinux-9/Dockerfile      |  9 +++-
 ci/linux-packages/yum/apache-arrow-adbc.spec.in   |  1 -
 ci/scripts/cpp_recipe.sh                          |  2 +-
 ci/scripts/cpp_test.sh                            |  1 -
 dev/release/verify-release-candidate.sh           | 13 +++--
 docker-compose.yml                                |  2 +
 go/adbc/driver/flightsql/logging.go               |  2 +-
 go/adbc/driver/internal/driverbase/connection.go  |  2 +-
 go/adbc/driver/internal/driverbase/database.go    |  2 +-
 go/adbc/driver/internal/driverbase/driver_test.go |  3 +-
 go/adbc/driver/internal/driverbase/logging.go     |  3 +-
 go/adbc/ext.go                                    |  2 +-
 go/adbc/go.mod                                    | 21 ++++----
 go/adbc/go.sum                                    | 47 ++++++++++++++++
 go/adbc/pkg/_tmpl/driver.go.tmpl                  | 21 ++++----
 go/adbc/pkg/doc.go                                |  1 +
 go/adbc/pkg/flightsql/driver.go                   | 21 ++++----
 go/adbc/pkg/panicdummy/driver.go                  | 33 ++++++------
 go/adbc/pkg/snowflake/driver.go                   | 21 ++++----
 go/adbc/sqldriver/driver.go                       |  4 +-
 r/adbcflightsql/DESCRIPTION                       |  2 +-
 r/adbcflightsql/tools/download-go.R               |  2 +-
 r/adbcsnowflake/DESCRIPTION                       |  2 +-
 39 files changed, 212 insertions(+), 179 deletions(-)

diff --git a/.env b/.env
index 0b5e04d6e..c1faa4be2 100644
--- a/.env
+++ b/.env
@@ -32,7 +32,7 @@ JDK=8
 MANYLINUX=2014
 MAVEN=3.6.3
 PYTHON=3.8
-GO=1.19.5
+GO=1.21.8
 ARROW_MAJOR_VERSION=14
 DOTNET=7.0
 
diff --git a/.github/workflows/integration.yml 
b/.github/workflows/integration.yml
index d34f72107..1a0c6f858 100644
--- a/.github/workflows/integration.yml
+++ b/.github/workflows/integration.yml
@@ -110,6 +110,9 @@ jobs:
         with:
           fetch-depth: 0
           persist-credentials: false
+      - name: Get required Go version
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - name: Get Date
         id: get-date
         shell: bash
@@ -135,7 +138,7 @@ jobs:
           pip install pytest-error-for-skips
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.19.13
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: go/adbc/go.sum
@@ -305,6 +308,9 @@ jobs:
         with:
           fetch-depth: 0
           persist-credentials: false
+      - name: Get required Go version
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - name: Get Date
         id: get-date
         shell: bash
@@ -333,7 +339,7 @@ jobs:
           sudo sysctl vm.mmap_rnd_bits=28
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.19.13
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: go/adbc/go.sum
diff --git a/.github/workflows/native-unix.yml 
b/.github/workflows/native-unix.yml
index 2f4152de3..57fe0167d 100644
--- a/.github/workflows/native-unix.yml
+++ b/.github/workflows/native-unix.yml
@@ -80,6 +80,9 @@ jobs:
         with:
           fetch-depth: 0
           persist-credentials: false
+      - name: Get required Go version
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - name: Get Date
         id: get-date
         shell: bash
@@ -103,7 +106,7 @@ jobs:
             --file ci/conda_env_cpp.txt
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.19.13
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: go/adbc/go.sum
@@ -117,7 +120,7 @@ jobs:
           export ADBC_BUILD_TESTS=OFF
           export ADBC_USE_ASAN=OFF
           export ADBC_USE_UBSAN=OFF
-          export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/${{ matrix.goarch 
}}/bin:$PATH
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/${{ matrix.goarch 
}}/bin:$PATH
           export ADBC_CMAKE_ARGS="-DCMAKE_UNITY_BUILD=ON"
           ./ci/scripts/cpp_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local"
       - name: Go Build
@@ -125,7 +128,7 @@ jobs:
         env:
           CGO_ENABLED: "1"
         run: |
-          export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/${{ matrix.goarch 
}}/bin:$PATH
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/${{ matrix.goarch 
}}/bin:$PATH
           ./ci/scripts/go_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local"
 
       - uses: actions/upload-artifact@v3
@@ -332,7 +335,7 @@ jobs:
           sudo sysctl vm.mmap_rnd_bits=28
 
       - name: Install staticcheck
-        run: go install honnef.co/go/tools/cmd/[email protected]
+        run: go install honnef.co/go/tools/cmd/staticcheck@latest
       - name: Go Build
         run: |
           ./ci/scripts/go_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local"
@@ -370,6 +373,9 @@ jobs:
         with:
           fetch-depth: 0
           persist-credentials: false
+      - name: Get required Go version
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - name: Get Date
         id: get-date
         shell: bash
@@ -399,14 +405,14 @@ jobs:
             --file ci/conda_env_cpp.txt
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.19.13
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: go/adbc/go.sum
       - name: Install staticcheck
         shell: bash -l {0}
         if: matrix.os == 'ubuntu-latest'
-        run: go install honnef.co/go/tools/cmd/[email protected]
+        run: go install honnef.co/go/tools/cmd/staticcheck@latest
 
       - uses: actions/download-artifact@v3
         with:
@@ -416,7 +422,7 @@ jobs:
       - name: Go Build
         shell: bash -l {0}
         run: |
-          export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/${{ matrix.goarch 
}}/bin:$PATH
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/${{ matrix.goarch 
}}/bin:$PATH
           ./ci/scripts/go_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local"
       - name: Run Staticcheck
         if: matrix.os == 'ubuntu-latest'
@@ -430,7 +436,7 @@ jobs:
         env:
           SNOWFLAKE_URI: ${{ secrets.SNOWFLAKE_URI }}
         run: |
-          export PATH=$RUNNER_TOOL_CACHE/go/1.19.13/${{ matrix.goarch 
}}/bin:$PATH
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/${{ matrix.goarch 
}}/bin:$PATH
           ./ci/scripts/go_test.sh "$(pwd)" "$(pwd)/build" "$HOME/local"
 
   # ------------------------------------------------------------
@@ -454,6 +460,9 @@ jobs:
         with:
           fetch-depth: 0
           persist-credentials: false
+      - name: Get required Go version
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - name: Get Date
         id: get-date
         shell: bash
@@ -484,7 +493,7 @@ jobs:
           sudo sysctl vm.mmap_rnd_bits=28
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.19.13
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: go/adbc/go.sum
@@ -501,10 +510,12 @@ jobs:
           ADBC_USE_ASAN: "0"
           ADBC_USE_UBSAN: "0"
         run: |
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/x64/bin:$PATH
           ./ci/scripts/python_build.sh "$(pwd)" "$(pwd)/build" "$HOME/local"
       - name: Build Panic Dummy
         shell: bash -l {0}
         run: |
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/x64/bin:$PATH
           if [[ $(uname) = "Darwin" ]]; then
             make -C ./go/adbc/pkg libadbc_driver_panicdummy.dylib
           else
@@ -518,10 +529,12 @@ jobs:
           else
             export 
PANICDUMMY_LIBRARY_PATH=$(pwd)/go/adbc/pkg/libadbc_driver_panicdummy.so
           fi
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/x64/bin:$PATH
           env BUILD_ALL=0 BUILD_DRIVER_MANAGER=1 ./ci/scripts/python_test.sh 
"$(pwd)" "$(pwd)/build" "$HOME/local"
       - name: Test Python Driver Flight SQL
         shell: bash -l {0}
         run: |
+          export PATH=$RUNNER_TOOL_CACHE/go/${GO_VERSION}/x64/bin:$PATH
           # Can't use Docker on macOS
           pushd $(pwd)/go/adbc
           go build -o testserver ./driver/flightsql/cmd/testserver
diff --git a/.github/workflows/native-windows.yml 
b/.github/workflows/native-windows.yml
index 57ff371ae..097f316d0 100644
--- a/.github/workflows/native-windows.yml
+++ b/.github/workflows/native-windows.yml
@@ -198,6 +198,10 @@ jobs:
         with:
           fetch-depth: 0
           persist-credentials: false
+      - name: Get required Go version
+        shell: bash
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - name: Get Date
         id: get-date
         shell: bash
@@ -223,7 +227,7 @@ jobs:
             --file ci/conda_env_cpp.txt
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.20.8
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: go/adbc/go.sum
@@ -238,7 +242,7 @@ jobs:
         env:
           CGO_ENABLED: "1"
         run: |
-          $env:PATH="$($env:RUNNER_TOOL_CACHE)\go\1.20.8\x64\bin;" + $env:PATH
+          
$env:PATH="${env:RUNNER_TOOL_CACHE}\go\${env:GO_VERSION}\x64\bin;${env:PATH}"
           .\ci\scripts\go_build.ps1 $pwd $pwd\build
       # TODO(apache/arrow#358): enable these tests on Windows
       # - name: Go Test
@@ -246,7 +250,7 @@ jobs:
       #   env:
       #     CGO_ENABLED: "1"
       #   run: |
-      #     $env:PATH="$($env:RUNNER_TOOL_CACHE)\go\1.20.8\x64\bin;" + 
$env:PATH
+      #     
$env:PATH="${env:RUNNER_TOOL_CACHE}\go\${env:GO_VERSION}\x64\bin;${env:PATH}"
       #     .\ci\scripts\go_test.ps1 $pwd $pwd\build
 
   # ------------------------------------------------------------
diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index 31bc16815..6ec81c1fe 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -265,7 +265,6 @@ jobs:
           - almalinux-8
           - almalinux-9
           - debian-bookworm
-          - debian-bullseye
           - ubuntu-jammy
     steps:
       - uses: actions/download-artifact@v3
@@ -686,7 +685,7 @@ jobs:
 
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.19.13
+          go-version: 1.21.8
           check-latest: true
           cache: true
           cache-dependency-path: adbc/go/adbc/go.sum
@@ -812,6 +811,8 @@ jobs:
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
 
+          (. adbc/.env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
+
       - name: Show inputs
         shell: pwsh
         run: |
@@ -841,11 +842,9 @@ jobs:
           .\bootstrap-vcpkg.bat -disableMetrics
           popd
 
-      # Windows needs newer Go than 1.19
-      # https://github.com/golang/go/issues/51007
       - uses: actions/setup-go@v5
         with:
-          go-version: 1.20.8
+          go-version: "${{ env.GO_VERSION }}"
           check-latest: true
           cache: true
           cache-dependency-path: adbc/go/adbc/go.sum
diff --git a/.github/workflows/r-check.yml b/.github/workflows/r-check.yml
index e29f7f3ed..0b368ca33 100644
--- a/.github/workflows/r-check.yml
+++ b/.github/workflows/r-check.yml
@@ -41,9 +41,12 @@ jobs:
 
     steps:
       - uses: actions/checkout@v4
+      - name: Get required Go version
+        run: |
+          (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
       - uses: actions/setup-go@v5
         with:
-          go-version: '1.20'
+          go-version: "${{ env.GO_VERSION }}"
       - uses: r-lib/actions/setup-r@v2
         with:
           r-version: release
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fb3a19cda..17ac98a2b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -59,7 +59,7 @@ repos:
         - "--linelength=90"
         - "--verbose=2"
   - repo: https://github.com/golangci/golangci-lint
-    rev: v1.49.0
+    rev: v1.57.1
     hooks:
     - id: golangci-lint
       entry: bash -c 'cd go/adbc && golangci-lint run --fix --timeout 5m'
diff --git a/ci/conda/meta.yaml b/ci/conda/meta.yaml
index a499f6b76..3b5a6af80 100644
--- a/ci/conda/meta.yaml
+++ b/ci/conda/meta.yaml
@@ -63,7 +63,7 @@ outputs:
         - {{ compiler('cxx') }}
         - _go_select *=cgo
         - cmake
-        - go-cgo >=1.19
+        - go-cgo >=1.21
         - ninja
         - pkg-config
     test:
diff --git a/ci/docker/python-wheel-manylinux.dockerfile 
b/ci/docker/python-wheel-manylinux.dockerfile
index 38d3b27b1..2ebfb6826 100644
--- a/ci/docker/python-wheel-manylinux.dockerfile
+++ b/ci/docker/python-wheel-manylinux.dockerfile
@@ -24,9 +24,11 @@ ARG VCPKG
 FROM 
${REPO}:${ARCH}-python-${PYTHON}-wheel-manylinux-${MANYLINUX}-vcpkg-${VCPKG}
 
 ARG ARCH
+ARG GO
 
 RUN yum install -y docker
 # arm64v8 -> arm64
-RUN wget --no-verbose https://go.dev/dl/go1.19.13.linux-${ARCH/v8/}.tar.gz
-RUN tar -C /usr/local -xzf go1.19.13.linux-${ARCH/v8/}.tar.gz
-ENV PATH="${PATH}:/usr/local/go/bin"
+RUN wget --no-verbose https://go.dev/dl/go${GO}.linux-${ARCH/v8/}.tar.gz && \
+    tar -C /usr/local -xzf go${GO}.linux-${ARCH/v8/}.tar.gz && \
+    rm go${GO}.linux-${ARCH/v8/}.tar.gz
+ENV PATH="/usr/local/go/bin:${PATH}"
diff --git a/ci/linux-packages/Rakefile b/ci/linux-packages/Rakefile
index 674d93605..3945c1111 100644
--- a/ci/linux-packages/Rakefile
+++ b/ci/linux-packages/Rakefile
@@ -104,10 +104,19 @@ class ADBCPackageTask < PackageTask
     end
   end
 
+  def detect_go_version
+    dot_env = File.join(__dir__, "..", "..", ".env")
+    File.readlines(dot_env, chomp: true).grep(/\AGO=/)[0].split("=", 2)[1]
+  end
+
+  def docker_build_options(os, architecture)
+    [
+      "--build-arg", "GO_VERSION=#{detect_go_version}",
+    ]
+  end
+
   def apt_targets_default
     [
-      "debian-bullseye",
-      # "debian-bullseye-arm64",
       "debian-bookworm",
       # "debian-bookworm-arm64",
       "ubuntu-jammy",
diff --git a/ci/linux-packages/apt/debian-bookworm/Dockerfile 
b/ci/linux-packages/apt/debian-bookworm/Dockerfile
index aa85e2820..2b8a3a89a 100644
--- a/ci/linux-packages/apt/debian-bookworm/Dockerfile
+++ b/ci/linux-packages/apt/debian-bookworm/Dockerfile
@@ -40,6 +40,7 @@ RUN \
   apt install -y -V ${quiet} \
     ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb && \
   rm apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb && \
+  echo "deb http://deb.debian.org/debian $(lsb_release --codename 
--short)-backports main" >> /etc/apt/sources.list && \
   apt update && \
   apt install -y -V ${quiet} \
     build-essential \
@@ -48,7 +49,6 @@ RUN \
     debhelper \
     devscripts \
     gobject-introspection \
-    golang \
     libarrow-glib-dev \
     libgirepository1.0-dev \
     libpq-dev \
@@ -58,4 +58,5 @@ RUN \
     pkg-config \
     tzdata \
     valac && \
+  apt install -y -V -t $(lsb_release --codename --short)-backports ${quiet} 
golang-1.21 && \
   apt clean
diff --git a/ci/linux-packages/apt/debian-bullseye/Dockerfile 
b/ci/linux-packages/apt/debian-bullseye/Dockerfile
deleted file mode 100644
index cda653f31..000000000
--- a/ci/linux-packages/apt/debian-bullseye/Dockerfile
+++ /dev/null
@@ -1,65 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
-#
-#   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.
-
-ARG FROM=debian:bullseye
-FROM ${FROM}
-
-RUN \
-  echo "debconf debconf/frontend select Noninteractive" | \
-    debconf-set-selections
-
-RUN \
-  echo 'APT::Install-Recommends "false";' > \
-    /etc/apt/apt.conf.d/disable-install-recommends
-
-RUN sed -i'' -e 's/main$/main contrib non-free/g' /etc/apt/sources.list
-
-ARG DEBUG
-RUN \
-  quiet=$([ "${DEBUG}" = "yes" ] || echo "-qq") && \
-  apt update ${quiet} && \
-  apt install -y -V ${quiet} \
-    ca-certificates \
-    lsb-release \
-    wget && \
-  wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | 
tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename 
--short).deb && \
-  apt install -y -V ${quiet} \
-    ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb && \
-  rm apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb && \
-  grep " $(lsb_release --codename --short) " /etc/apt/sources.list | \
-    sed -e "s/$(lsb_release --codename --short)/$(lsb_release --codename 
--short)-backports/g" > \
-    /etc/apt/sources.list.d/backports.list && \
-  apt update && \
-  apt install -y -V ${quiet} \
-    build-essential \
-    ccache \
-    cmake \
-    debhelper \
-    devscripts \
-    gobject-introspection \
-    libarrow-glib-dev \
-    libgirepository1.0-dev \
-    libpq-dev \
-    libsqlite3-dev \
-    ninja-build \
-    pkg-config \
-    tzdata \
-    valac && \
-  apt install -y -V -t $(lsb_release --codename --short)-backports ${quiet} \
-    golang \
-    meson && \
-  apt clean
diff --git a/ci/linux-packages/apt/ubuntu-jammy/Dockerfile 
b/ci/linux-packages/apt/ubuntu-jammy/Dockerfile
index bc5708e34..d839c12e7 100644
--- a/ci/linux-packages/apt/ubuntu-jammy/Dockerfile
+++ b/ci/linux-packages/apt/ubuntu-jammy/Dockerfile
@@ -59,5 +59,5 @@ RUN \
     tzdata \
     valac && \
   apt install -y -V -t $(lsb_release --codename --short)-backports ${quiet} \
-    golang-1.20 && \
+    golang-1.21 && \
   apt clean
diff --git a/ci/linux-packages/debian/control b/ci/linux-packages/debian/control
index 88e490222..970933c5d 100644
--- a/ci/linux-packages/debian/control
+++ b/ci/linux-packages/debian/control
@@ -23,7 +23,7 @@ Build-Depends:
   cmake,
   debhelper-compat (= 12),
   gobject-introspection,
-  golang | golang-1.20,
+  golang | golang-1.21,
   libarrow-glib-dev,
   libgirepository1.0-dev,
   libpq-dev,
diff --git a/ci/linux-packages/debian/rules b/ci/linux-packages/debian/rules
index ce356e2cd..2bc2c5e8a 100755
--- a/ci/linux-packages/debian/rules
+++ b/ci/linux-packages/debian/rules
@@ -32,7 +32,7 @@ CMAKE_BUILD_TYPE = RelWithDebInfo
 
 override_dh_auto_configure:
        env                                             \
-         PATH=/usr/lib/go-1.20/bin:$${PATH}            \
+         PATH=/usr/lib/go-1.21/bin:$${PATH}            \
          dh_auto_configure                             \
            --sourcedirectory=c/                        \
            --builddirectory=c.build                    \
diff --git a/ci/linux-packages/yum/almalinux-8/Dockerfile 
b/ci/linux-packages/yum/almalinux-8/Dockerfile
index 8768d9ff6..9f6752126 100644
--- a/ci/linux-packages/yum/almalinux-8/Dockerfile
+++ b/ci/linux-packages/yum/almalinux-8/Dockerfile
@@ -30,7 +30,6 @@ RUN \
     cmake \
     gcc-c++ \
     gobject-introspection-devel \
-    golang \
     libpq-devel \
     make \
     ninja-build \
@@ -40,5 +39,12 @@ RUN \
     rpmdevtools \
     sqlite-devel \
     tar \
+    wget \
     vala && \
   yum clean ${quiet} all
+
+ARG GO_VERSION
+RUN wget --no-verbose https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz && \
+    rm go${GO_VERSION}.linux-amd64.tar.gz
+ENV PATH="/usr/local/go/bin:${PATH}"
diff --git a/ci/linux-packages/yum/almalinux-9/Dockerfile 
b/ci/linux-packages/yum/almalinux-9/Dockerfile
index 7d1929e45..084393946 100644
--- a/ci/linux-packages/yum/almalinux-9/Dockerfile
+++ b/ci/linux-packages/yum/almalinux-9/Dockerfile
@@ -30,7 +30,6 @@ RUN \
     cmake \
     gcc-c++ \
     gobject-introspection-devel \
-    golang \
     libpq-devel \
     make \
     ninja-build \
@@ -40,5 +39,13 @@ RUN \
     rpmdevtools \
     sqlite-devel \
     tar \
+    wget \
     vala && \
   dnf clean ${quiet} all
+
+
+ARG GO_VERSION
+RUN wget --no-verbose https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz && \
+    rm go${GO_VERSION}.linux-amd64.tar.gz
+ENV PATH="/usr/local/go/bin:${PATH}"
diff --git a/ci/linux-packages/yum/apache-arrow-adbc.spec.in 
b/ci/linux-packages/yum/apache-arrow-adbc.spec.in
index d1ba2d6a9..9d6da18ba 100644
--- a/ci/linux-packages/yum/apache-arrow-adbc.spec.in
+++ b/ci/linux-packages/yum/apache-arrow-adbc.spec.in
@@ -44,7 +44,6 @@ BuildRequires:        arrow-glib-devel
 BuildRequires: cmake
 BuildRequires: gcc-c++
 BuildRequires: gobject-introspection-devel
-BuildRequires: golang
 BuildRequires: libpq-devel
 BuildRequires: ninja-build
 BuildRequires: pkgconfig
diff --git a/ci/scripts/cpp_recipe.sh b/ci/scripts/cpp_recipe.sh
index 2d97f94fa..b3cf2f3ce 100755
--- a/ci/scripts/cpp_recipe.sh
+++ b/ci/scripts/cpp_recipe.sh
@@ -30,7 +30,7 @@ main() {
 
     export DYLD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${install_dir}/lib"
     export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${install_dir}/lib"
-    export GODEBUG=cgocheck=2
+    export GOEXPERIMENT=cgocheck2
 
     mkdir -p "${build_dir}"
     pushd "${build_dir}"
diff --git a/ci/scripts/cpp_test.sh b/ci/scripts/cpp_test.sh
index dbdae2537..e5600b561 100755
--- a/ci/scripts/cpp_test.sh
+++ b/ci/scripts/cpp_test.sh
@@ -71,7 +71,6 @@ main() {
 
     export DYLD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${install_dir}/lib"
     export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${install_dir}/lib"
-    export GODEBUG=cgocheck=2
 
     test_project "${build_dir}"
 }
diff --git a/dev/release/verify-release-candidate.sh 
b/dev/release/verify-release-candidate.sh
index 45382a560..0e2f1f6e3 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -23,7 +23,7 @@
 # - Maven >= 3.3.9
 # - JDK >=7
 # - gcc >= 4.8
-# - Go >= 1.20
+# - Go >= 1.21
 # - Docker
 #
 # To reuse build artifacts between runs set ARROW_TMPDIR environment variable 
to
@@ -168,8 +168,7 @@ test_apt() {
   if [ "${TEST_STAGING:-0}" -gt 0 ]; then
     verify_type=staging-${verify_type}
   fi
-  for target in "debian:bullseye" \
-                "debian:bookworm" \
+  for target in "debian:bookworm" \
                 "ubuntu:jammy"; do \
     show_info "Verifying ${target}..."
     if ! docker run \
@@ -254,7 +253,7 @@ install_go() {
     return 0
   fi
 
-  local version=1.19.13
+  local version=1.21.8
   show_info "Installing go version ${version}..."
 
   local arch="$(uname -m)"
@@ -271,7 +270,7 @@ install_go() {
   fi
 
   local archive="go${version}.${os}-${arch}.tar.gz"
-  curl -sLO https://dl.google.com/go/$archive
+  curl -sLO https://go.dev/dl/$archive
 
   local prefix=${ARROW_TMPDIR}/go
   mkdir -p $prefix
@@ -413,7 +412,7 @@ test_cpp() {
   maybe_setup_conda \
     --file ci/conda_env_cpp.txt \
     compilers \
-    go=1.20 || exit 1
+    go=1.21 || exit 1
 
   if [ "${USE_CONDA}" -gt 0 ]; then
     export 
CMAKE_PREFIX_PATH="${CONDA_BACKUP_CMAKE_PREFIX_PATH}:${CMAKE_PREFIX_PATH}"
@@ -564,7 +563,7 @@ test_go() {
   # apache/arrow-adbc#517: `go build` calls git. Don't assume system
   # has git; even if it's there, go_build.sh sets DYLD_LIBRARY_PATH
   # which can interfere with system git.
-  maybe_setup_conda compilers git go=1.20 || exit 1
+  maybe_setup_conda compilers git go=1.21 || exit 1
 
   if [ "${USE_CONDA}" -gt 0 ]; then
     # The CMake setup forces RPATH to be the Conda prefix
diff --git a/docker-compose.yml b/docker-compose.yml
index e31c8af0b..cb6146f3c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -83,6 +83,7 @@ services:
       dockerfile: ci/docker/python-wheel-manylinux.dockerfile
       args:
         ARCH: ${ARCH}
+        GO: ${GO}
         MANYLINUX: ${MANYLINUX}
         PYTHON: ${PYTHON}
         REPO: ${REPO}
@@ -102,6 +103,7 @@ services:
       dockerfile: ci/docker/python-wheel-manylinux.dockerfile
       args:
         ARCH: ${ARCH}
+        GO: ${GO}
         MANYLINUX: ${MANYLINUX}
         PYTHON: ${PYTHON}
         REPO: ${REPO}
diff --git a/go/adbc/driver/flightsql/logging.go 
b/go/adbc/driver/flightsql/logging.go
index 6957218b2..4fb12c411 100644
--- a/go/adbc/driver/flightsql/logging.go
+++ b/go/adbc/driver/flightsql/logging.go
@@ -20,11 +20,11 @@ package flightsql
 import (
        "context"
        "io"
+       "log/slog"
        "time"
 
        "golang.org/x/exp/maps"
        "golang.org/x/exp/slices"
-       "golang.org/x/exp/slog"
        "google.golang.org/grpc"
        "google.golang.org/grpc/metadata"
 )
diff --git a/go/adbc/driver/internal/driverbase/connection.go 
b/go/adbc/driver/internal/driverbase/connection.go
index 68b0a9bc6..fc1fc0d36 100644
--- a/go/adbc/driver/internal/driverbase/connection.go
+++ b/go/adbc/driver/internal/driverbase/connection.go
@@ -20,13 +20,13 @@ package driverbase
 import (
        "context"
        "fmt"
+       "log/slog"
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/internal"
        "github.com/apache/arrow/go/v16/arrow"
        "github.com/apache/arrow/go/v16/arrow/array"
        "github.com/apache/arrow/go/v16/arrow/memory"
-       "golang.org/x/exp/slog"
 )
 
 const (
diff --git a/go/adbc/driver/internal/driverbase/database.go 
b/go/adbc/driver/internal/driverbase/database.go
index 9ab00967a..477c4304b 100644
--- a/go/adbc/driver/internal/driverbase/database.go
+++ b/go/adbc/driver/internal/driverbase/database.go
@@ -19,10 +19,10 @@ package driverbase
 
 import (
        "context"
+       "log/slog"
 
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow/go/v16/arrow/memory"
-       "golang.org/x/exp/slog"
 )
 
 const (
diff --git a/go/adbc/driver/internal/driverbase/driver_test.go 
b/go/adbc/driver/internal/driverbase/driver_test.go
index f43a049bb..309c529c1 100644
--- a/go/adbc/driver/internal/driverbase/driver_test.go
+++ b/go/adbc/driver/internal/driverbase/driver_test.go
@@ -20,10 +20,9 @@ package driverbase_test
 import (
        "context"
        "fmt"
+       "log/slog"
        "testing"
 
-       "golang.org/x/exp/slog"
-
        "github.com/apache/arrow-adbc/go/adbc"
        "github.com/apache/arrow-adbc/go/adbc/driver/internal"
        "github.com/apache/arrow-adbc/go/adbc/driver/internal/driverbase"
diff --git a/go/adbc/driver/internal/driverbase/logging.go 
b/go/adbc/driver/internal/driverbase/logging.go
index 2660b4a91..795fca6f6 100644
--- a/go/adbc/driver/internal/driverbase/logging.go
+++ b/go/adbc/driver/internal/driverbase/logging.go
@@ -18,9 +18,8 @@
 package driverbase
 
 import (
+       "log/slog"
        "os"
-
-       "golang.org/x/exp/slog"
 )
 
 func nilLogger() *slog.Logger {
diff --git a/go/adbc/ext.go b/go/adbc/ext.go
index dcfaeaebf..f82c6d63a 100644
--- a/go/adbc/ext.go
+++ b/go/adbc/ext.go
@@ -18,7 +18,7 @@
 package adbc
 
 import (
-       "golang.org/x/exp/slog"
+       "log/slog"
 )
 
 // DatabaseLogging is a Database that also supports logging information to an
diff --git a/go/adbc/go.mod b/go/adbc/go.mod
index 35bdc7081..9e46d7ecd 100644
--- a/go/adbc/go.mod
+++ b/go/adbc/go.mod
@@ -17,7 +17,7 @@
 
 module github.com/apache/arrow-adbc/go/adbc
 
-go 1.19
+go 1.21
 
 require (
        github.com/apache/arrow/go/v16 v16.0.0-20240307132415-1c9a3122c603
@@ -27,7 +27,7 @@ require (
        github.com/snowflakedb/gosnowflake v1.8.0
        github.com/stretchr/testify v1.9.0
        github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a
-       golang.org/x/exp v0.0.0-20240213143201-ec583247a57a
+       golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81
        golang.org/x/sync v0.6.0
        golang.org/x/tools v0.19.0
        google.golang.org/grpc v1.58.3
@@ -41,7 +41,7 @@ require (
        github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
        github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.0 // indirect
        github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // 
indirect
-       github.com/andybalholm/brotli v1.0.5 // indirect
+       github.com/andybalholm/brotli v1.1.0 // indirect
        github.com/apache/arrow/go/v14 v14.0.2 // indirect
        github.com/apache/thrift v0.17.0 // indirect
        github.com/aws/aws-sdk-go-v2 v1.25.1 // indirect
@@ -68,16 +68,18 @@ require (
        github.com/golang/snappy v0.0.4 // indirect
        github.com/google/flatbuffers v24.3.7+incompatible // indirect
        github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // 
indirect
+       github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
        github.com/jmespath/go-jmespath v0.4.0 // indirect
        github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // 
indirect
        github.com/klauspost/asmfmt v1.3.2 // indirect
        github.com/klauspost/compress v1.17.7 // indirect
        github.com/klauspost/cpuid/v2 v2.2.7 // indirect
-       github.com/mattn/go-isatty v0.0.19 // indirect
+       github.com/mattn/go-isatty v0.0.20 // indirect
        github.com/mattn/go-sqlite3 v1.14.22 // indirect
        github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // 
indirect
        github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
        github.com/mtibben/percent v0.2.1 // indirect
+       github.com/ncruces/go-strftime v0.1.9 // indirect
        github.com/pierrec/lz4/v4 v4.1.21 // indirect
        github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
        github.com/pmezard/go-difflib v1.0.0 // indirect
@@ -97,11 +99,12 @@ require (
        lukechampine.com/uint128 v1.3.0 // indirect
        modernc.org/cc/v3 v3.40.0 // indirect
        modernc.org/ccgo/v3 v3.16.13 // indirect
-       modernc.org/libc v1.22.4 // indirect
-       modernc.org/mathutil v1.5.0 // indirect
-       modernc.org/memory v1.5.0 // indirect
+       modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b // indirect
+       modernc.org/libc v1.45.3 // indirect
+       modernc.org/mathutil v1.6.0 // indirect
+       modernc.org/memory v1.7.2 // indirect
        modernc.org/opt v0.1.3 // indirect
-       modernc.org/sqlite v1.21.2 // indirect
-       modernc.org/strutil v1.1.3 // indirect
+       modernc.org/sqlite v1.29.5 // indirect
+       modernc.org/strutil v1.2.0 // indirect
        modernc.org/token v1.1.0 // indirect
 )
diff --git a/go/adbc/go.sum b/go/adbc/go.sum
index cf74b7baa..189d225e1 100644
--- a/go/adbc/go.sum
+++ b/go/adbc/go.sum
@@ -5,16 +5,21 @@ github.com/99designs/keyring v1.2.2/go.mod 
h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTB
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 
h1:c4k2FIYIh4xtwqrQwV0Ct1v5+ehlNXj5NI/MWVsiTkQ=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2/go.mod 
h1:5FDJtLEO/GxwNgUxbwrY3LP0pEoThTQJtk2oysdXHxM=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 
h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod 
h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 
h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod 
h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage 
v1.5.0 h1:AifHbc4mg0x9zW52WOpKbsHaDKuRhlI7TVl47thgQ70=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage 
v1.5.0/go.mod h1:T5RfihdXtBDxt1Ch2wobif3TvzTdumDy29kahv6AV9A=
 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.0 
h1:IfFdxTUDiV58iZqPKgyWiz4X4fCxZeQ1pTQPImLYXpY=
 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.0/go.mod 
h1:SUZc9YRRHfx2+FAQKNDGrssXehqLpxmwRv2mC/5ntj4=
 github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 
h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod 
h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
 github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c 
h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU=
 github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod 
h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
 github.com/andybalholm/brotli v1.0.5 
h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
 github.com/andybalholm/brotli v1.0.5/go.mod 
h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/andybalholm/brotli v1.1.0 
h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
+github.com/andybalholm/brotli v1.1.0/go.mod 
h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
 github.com/apache/arrow/go/v14 v14.0.2 
h1:N8OkaJEOfI3mEZt07BIkvo4sC6XDbL+48MBPWO5IONw=
 github.com/apache/arrow/go/v14 v14.0.2/go.mod 
h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY=
 github.com/apache/arrow/go/v16 v16.0.0-20240307132415-1c9a3122c603 
h1:UOXjIpzPxFAsxrtqUa+e8yuVdhMklFi+Uyo6oB+sDK4=
@@ -26,9 +31,11 @@ github.com/aws/aws-sdk-go-v2 v1.25.1/go.mod 
h1:Evoc5AsmtveRt1komDwIsjHFyrP5tDuF1
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 
h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU=
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod 
h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo=
 github.com/aws/aws-sdk-go-v2/config v1.27.2 
h1:XnMKB9JRjfnxg9ZkUic4MiapnWJISWRo8HVM+7nx9qQ=
+github.com/aws/aws-sdk-go-v2/config v1.27.2/go.mod 
h1:z/XIktFoVIKNEqX/811vx4eHetrC3tAkgJKL1ZY/KM4=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.2 
h1:tCZXWtH0HiIEZ50NJ7/QEaXmuzEd36L+2JUiZkp2nsc=
 github.com/aws/aws-sdk-go-v2/credentials v1.17.2/go.mod 
h1:7Zo+D6q4auSIo3p4EItuTKTk7J+RqjASISZqLvmUgpc=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.1 
h1:lk1ZZFbdb24qpOwVC1AwYNrswUjAxeyey6kFBVANudQ=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.1/go.mod 
h1:/xJ6x1NehNGCX4tvGzzj2bq5TBOT/Yxq+qbL9Jpx2Vk=
 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.4 
h1:yuhSpqtahkrC8kRCU5v4gEaTDy/ccTIPIkufIRF7YTk=
 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.4/go.mod 
h1:q3SxgP2WD9YRLCybtyse8EgO3vKKWVmxlTmBNeRXPyk=
 github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.1 
h1:evvi7FbTAoFxdP/mixmP7LIYzQWAmzBcwNB/es9XPNc=
@@ -36,6 +43,7 @@ github.com/aws/aws-sdk-go-v2/internal/configsources 
v1.3.1/go.mod h1:rH61DT6FDdi
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.1 
h1:RAnaIrbxPtlXNVI/OIlh1sidTQ3e1qM6LRjs7N0bE0I=
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.1/go.mod 
h1:nbgAGkH5lk0RZRMh6A4K/oG6Xj11eC/1CyDow+DUAFI=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 
h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod 
h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
 github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.1 
h1:rtYJd3w6IWCTVS8vmMaiXjW198noh2PBm5CiXyJea9o=
 github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.1/go.mod 
h1:zvXu+CTlib30LUy4LTNFc6HTZ/K6zCae5YIHTdX9wIo=
 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 
h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE=
@@ -49,8 +57,11 @@ github.com/aws/aws-sdk-go-v2/service/internal/s3shared 
v1.17.1/go.mod h1:s5rqdn7
 github.com/aws/aws-sdk-go-v2/service/s3 v1.50.3 
h1:Cv/HH7sLzEdJMYQi4MCNHxZeyubQNOOIdVc0VU0lo3Q=
 github.com/aws/aws-sdk-go-v2/service/s3 v1.50.3/go.mod 
h1:lTW7O4iMAnO2o7H3XJTvqaWFZCH6zIPs+eP7RdG/yp0=
 github.com/aws/aws-sdk-go-v2/service/sso v1.19.2 
h1:pnj8llQoBAHD4UmbM8UM5GdfycFJKMhgPSeaOyRaZ34=
+github.com/aws/aws-sdk-go-v2/service/sso v1.19.2/go.mod 
h1:x6/tCd1o/AOKQR+iYnjrzhJxD+w0xRN34asGPaSV7ew=
 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.2 
h1:L4yhKxW6HbTSQ08OsvPJuaspaLE40qMgprgXUNFUiMg=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.2/go.mod 
h1:lZB123q0SVQ3dfIbEOcGzhQHrwVBcHVReNS9tm20oU4=
 github.com/aws/aws-sdk-go-v2/service/sts v1.27.2 
h1:Dr+7r/p20XpN+1U5tVNZfA2bLq0kQ9IjVBM0iAyMMLg=
+github.com/aws/aws-sdk-go-v2/service/sts v1.27.2/go.mod 
h1:ozhhG9/NB5c9jcmhGq6tX9dpp21LYdmRWRQVppASim4=
 github.com/aws/smithy-go v1.20.1 
h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw=
 github.com/aws/smithy-go v1.20.1/go.mod 
h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
 github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
@@ -61,6 +72,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1 
h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
+github.com/dnaeon/go-vcr v1.2.0/go.mod 
h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
 github.com/dustin/go-humanize v1.0.1 
h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod 
h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
 github.com/dvsekhvalnov/jose2go v1.6.0 
h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY=
@@ -74,6 +86,7 @@ github.com/goccy/go-json v0.10.2/go.mod 
h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG
 github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 
h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
 github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod 
h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
 github.com/golang-jwt/jwt/v5 v5.2.0 
h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod 
h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
 github.com/golang/protobuf v1.5.4 
h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod 
h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
@@ -81,11 +94,15 @@ github.com/golang/snappy v0.0.4/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
 github.com/google/flatbuffers v24.3.7+incompatible 
h1:BxGUkIQnOciBu33bd5BdvqY8Qvo0O/GR4SPhh7x9Ed0=
 github.com/google/flatbuffers v24.3.7+incompatible/go.mod 
h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.5.9/go.mod 
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 
h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
+github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod 
h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c 
h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
 github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod 
h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
+github.com/hashicorp/golang-lru/v2 v2.0.7 
h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod 
h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
 github.com/jmespath/go-jmespath v0.4.0 
h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
 github.com/jmespath/go-jmespath v0.4.0/go.mod 
h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1 
h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
@@ -99,12 +116,17 @@ github.com/klauspost/compress v1.17.7/go.mod 
h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ib
 github.com/klauspost/cpuid/v2 v2.2.7 
h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
 github.com/klauspost/cpuid/v2 v2.2.7/go.mod 
h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod 
h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod 
h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod 
h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/kylelemons/godebug v1.1.0 
h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod 
h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
 github.com/mattn/go-isatty v0.0.19 
h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
 github.com/mattn/go-isatty v0.0.19/go.mod 
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.20 
h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod 
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-sqlite3 v1.14.22 
h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
 github.com/mattn/go-sqlite3 v1.14.22/go.mod 
h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 
h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=
@@ -113,6 +135,8 @@ github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 
h1:+n/aFZefKZp7spd8D
 github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod 
h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
 github.com/mtibben/percent v0.2.1 
h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
 github.com/mtibben/percent v0.2.1/go.mod 
h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
+github.com/ncruces/go-strftime v0.1.9 
h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
+github.com/ncruces/go-strftime v0.1.9/go.mod 
h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod 
h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/pierrec/lz4/v4 v4.1.21 
h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
 github.com/pierrec/lz4/v4 v4.1.21/go.mod 
h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
@@ -124,6 +148,7 @@ github.com/remyoudompheng/bigfft 
v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qq
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec 
h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod 
h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/rogpeppe/go-internal v1.9.0 
h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
+github.com/rogpeppe/go-internal v1.9.0/go.mod 
h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/sirupsen/logrus v1.9.3 
h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
 github.com/sirupsen/logrus v1.9.3/go.mod 
h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/snowflakedb/gosnowflake v1.8.0 
h1:4bQj8eAYGMkou/nICiIEb9jSbBLDDp5cB6JaKx9WwiA=
@@ -137,6 +162,7 @@ github.com/stretchr/testify v1.9.0/go.mod 
h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8
 github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a 
h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
 github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod 
h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
 github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
+github.com/zeebo/assert v1.3.0/go.mod 
h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
 github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
 github.com/zeebo/xxh3 v1.0.2/go.mod 
h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -145,6 +171,8 @@ golang.org/x/crypto v0.21.0 
h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
 golang.org/x/crypto v0.21.0/go.mod 
h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
 golang.org/x/exp v0.0.0-20240213143201-ec583247a57a 
h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE=
 golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod 
h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
+golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81 
h1:6R2FC06FonbXQ8pK11/PDFY6N6LWlf9KlzibaCapmqc=
+golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81/go.mod 
h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
 golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
 golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -170,6 +198,7 @@ golang.org/x/tools v0.19.0/go.mod 
h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc
 golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 
h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
 golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod 
h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
 gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o=
+gonum.org/v1/gonum v0.12.0/go.mod 
h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 
h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20231002182017-d307bd883b97/go.mod 
h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY=
 google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ=
@@ -179,8 +208,10 @@ google.golang.org/protobuf v1.33.0/go.mod 
h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c 
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod 
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -191,20 +222,36 @@ modernc.org/cc/v3 v3.40.0/go.mod 
h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
 modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw=
 modernc.org/ccgo/v3 v3.16.13/go.mod 
h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
 modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
+modernc.org/ccorpus v1.11.6/go.mod 
h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
+modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b 
h1:BnN1t+pb1cy61zbvSUV7SeI0PwosMhlAEi/vBY4qxp8=
+modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b/go.mod 
h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
 modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
+modernc.org/httpfs v1.0.6/go.mod 
h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
 modernc.org/libc v1.22.4 h1:wymSbZb0AlrjdAVX3cjreCHTPCpPARbQXNz6BHPzdwQ=
 modernc.org/libc v1.22.4/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
+modernc.org/libc v1.45.3 h1:lI7aT+kT0pg15LRTWTERIxdqJQnqJhKZmOV9gCli8YA=
+modernc.org/libc v1.45.3/go.mod h1:YkRHLoN4L70OdO1cVmM83KZhRbRvsc3XogfVzbTXBwE=
 modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
 modernc.org/mathutil v1.5.0/go.mod 
h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
+modernc.org/mathutil v1.6.0/go.mod 
h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
 modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
 modernc.org/memory v1.5.0/go.mod 
h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
+modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
+modernc.org/memory v1.7.2/go.mod 
h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
 modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
 modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
 modernc.org/sqlite v1.21.2 h1:ixuUG0QS413Vfzyx6FWx6PYTmHaOegTY+hjzhn7L+a0=
 modernc.org/sqlite v1.21.2/go.mod 
h1:cxbLkB5WS32DnQqeH4h4o1B0eMr8W/y8/RGuxQ3JsC0=
+modernc.org/sqlite v1.29.5 h1:8l/SQKAjDtZFo9lkJLdk8g9JEOeYRG4/ghStDCCTiTE=
+modernc.org/sqlite v1.29.5/go.mod 
h1:S02dvcmm7TnTRvGhv8IGYyLnIt7AS2KPaB1F/71p75U=
 modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY=
 modernc.org/strutil v1.1.3/go.mod 
h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
+modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
+modernc.org/strutil v1.2.0/go.mod 
h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
 modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws=
+modernc.org/tcl v1.15.1/go.mod h1:aEjeGJX2gz1oWKOLDVZ2tnEWLUrIn8H+GFu+akoDhqs=
 modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
 modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
 modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE=
+modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ=
diff --git a/go/adbc/pkg/_tmpl/driver.go.tmpl b/go/adbc/pkg/_tmpl/driver.go.tmpl
index 409b3ca56..21a9e0919 100644
--- a/go/adbc/pkg/_tmpl/driver.go.tmpl
+++ b/go/adbc/pkg/_tmpl/driver.go.tmpl
@@ -50,6 +50,7 @@ import (
        "context"
        "errors"
        "fmt"
+       "log/slog"
        "os"
        "runtime"
        "runtime/cgo"
@@ -62,15 +63,13 @@ import (
        "github.com/apache/arrow/go/v16/arrow/cdata"
        "github.com/apache/arrow/go/v16/arrow/memory"
        "github.com/apache/arrow/go/v16/arrow/memory/mallocator"
-       "golang.org/x/exp/slog"
 )
 
 // Must use malloc() to respect CGO rules
 var drv = {{.Driver}}(mallocator.NewMallocator())
 // Flag set if any method panic()ed - afterwards all calls to driver will fail
 // since internal state of driver is unknown
-// (Can't use atomic.Bool since that's Go 1.19)
-var globalPoison int32 = 0
+var globalPoison atomic.Bool
 
 const errPrefix = "[{{.Prefix}}] "
 const logLevelEnvVar = "ADBC_DRIVER_{{.PrefixUpper}}_LOG_LEVEL"
@@ -155,7 +154,7 @@ func errToAdbcErr(adbcerr *C.struct_AdbcError, err error) 
adbc.Status {
 
 // We panicked; make all API functions error and dump stack traces
 func poison(err *C.struct_AdbcError, fname string, e interface{}) 
C.AdbcStatusCode {
-       if atomic.SwapInt32(&globalPoison, 1) == 0 {
+       if !globalPoison.Swap(true) {
                // Only print stack traces on the first occurrence
                buf := make([]byte, 1<<20)
                length := runtime.Stack(buf, true)
@@ -262,7 +261,7 @@ func (c *cancellableContext) cancelContext() {
 }
 
 func checkDBAlloc(db *C.struct_AdbcDatabase, err *C.struct_AdbcError, fname 
string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -564,7 +563,7 @@ func {{.Prefix}}DatabaseNew(db *C.struct_AdbcDatabase, err 
*C.struct_AdbcError)
                        code = poison(err, "AdbcDatabaseNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcDatabaseNew: Go panicked, driver is in unknown 
state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -709,7 +708,7 @@ type cConn struct {
 }
 
 func checkConnAlloc(cnxn *C.struct_AdbcConnection, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -840,7 +839,7 @@ func {{.Prefix}}ConnectionNew(cnxn 
*C.struct_AdbcConnection, err *C.struct_AdbcE
                        code = poison(err, "AdbcConnectionNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcConnectionNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1285,7 +1284,7 @@ type cStmt struct {
 }
 
 func checkStmtAlloc(stmt *C.struct_AdbcStatement, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -1415,7 +1414,7 @@ func {{.Prefix}}StatementNew(cnxn 
*C.struct_AdbcConnection, stmt *C.struct_AdbcS
                        code = poison(err, "AdbcStatementNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1446,7 +1445,7 @@ func {{.Prefix}}StatementRelease(stmt 
*C.struct_AdbcStatement, err *C.struct_Adb
                        code = poison(err, "AdbcStatementRelease", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementRelease: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
diff --git a/go/adbc/pkg/doc.go b/go/adbc/pkg/doc.go
index 8aa95d75a..7dfc136fc 100644
--- a/go/adbc/pkg/doc.go
+++ b/go/adbc/pkg/doc.go
@@ -30,3 +30,4 @@ package pkg
 
 //go:generate go run ./gen -prefix "FlightSQL" -driver ../driver/flightsql -o 
flightsql
 //go:generate go run ./gen -prefix "Snowflake" -driver ../driver/snowflake -o 
snowflake
+//go:generate go run ./gen -prefix "PanicDummy" -driver ../driver/panicdummy 
-o panicdummy
diff --git a/go/adbc/pkg/flightsql/driver.go b/go/adbc/pkg/flightsql/driver.go
index dc1927a17..86b7c78ed 100644
--- a/go/adbc/pkg/flightsql/driver.go
+++ b/go/adbc/pkg/flightsql/driver.go
@@ -52,6 +52,7 @@ import (
        "context"
        "errors"
        "fmt"
+       "log/slog"
        "os"
        "runtime"
        "runtime/cgo"
@@ -65,7 +66,6 @@ import (
        "github.com/apache/arrow/go/v16/arrow/cdata"
        "github.com/apache/arrow/go/v16/arrow/memory"
        "github.com/apache/arrow/go/v16/arrow/memory/mallocator"
-       "golang.org/x/exp/slog"
 )
 
 // Must use malloc() to respect CGO rules
@@ -73,8 +73,7 @@ var drv = flightsql.NewDriver(mallocator.NewMallocator())
 
 // Flag set if any method panic()ed - afterwards all calls to driver will fail
 // since internal state of driver is unknown
-// (Can't use atomic.Bool since that's Go 1.19)
-var globalPoison int32 = 0
+var globalPoison atomic.Bool
 
 const errPrefix = "[FlightSQL] "
 const logLevelEnvVar = "ADBC_DRIVER_FLIGHTSQL_LOG_LEVEL"
@@ -159,7 +158,7 @@ func errToAdbcErr(adbcerr *C.struct_AdbcError, err error) 
adbc.Status {
 
 // We panicked; make all API functions error and dump stack traces
 func poison(err *C.struct_AdbcError, fname string, e interface{}) 
C.AdbcStatusCode {
-       if atomic.SwapInt32(&globalPoison, 1) == 0 {
+       if !globalPoison.Swap(true) {
                // Only print stack traces on the first occurrence
                buf := make([]byte, 1<<20)
                length := runtime.Stack(buf, true)
@@ -265,7 +264,7 @@ func (c *cancellableContext) cancelContext() {
 }
 
 func checkDBAlloc(db *C.struct_AdbcDatabase, err *C.struct_AdbcError, fname 
string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -567,7 +566,7 @@ func FlightSQLDatabaseNew(db *C.struct_AdbcDatabase, err 
*C.struct_AdbcError) (c
                        code = poison(err, "AdbcDatabaseNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcDatabaseNew: Go panicked, driver is in unknown 
state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -712,7 +711,7 @@ type cConn struct {
 }
 
 func checkConnAlloc(cnxn *C.struct_AdbcConnection, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -843,7 +842,7 @@ func FlightSQLConnectionNew(cnxn *C.struct_AdbcConnection, 
err *C.struct_AdbcErr
                        code = poison(err, "AdbcConnectionNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcConnectionNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1288,7 +1287,7 @@ type cStmt struct {
 }
 
 func checkStmtAlloc(stmt *C.struct_AdbcStatement, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -1418,7 +1417,7 @@ func FlightSQLStatementNew(cnxn *C.struct_AdbcConnection, 
stmt *C.struct_AdbcSta
                        code = poison(err, "AdbcStatementNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1449,7 +1448,7 @@ func FlightSQLStatementRelease(stmt 
*C.struct_AdbcStatement, err *C.struct_AdbcE
                        code = poison(err, "AdbcStatementRelease", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementRelease: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
diff --git a/go/adbc/pkg/panicdummy/driver.go b/go/adbc/pkg/panicdummy/driver.go
index 7b13a0612..6d22e9146 100644
--- a/go/adbc/pkg/panicdummy/driver.go
+++ b/go/adbc/pkg/panicdummy/driver.go
@@ -52,6 +52,7 @@ import (
        "context"
        "errors"
        "fmt"
+       "log/slog"
        "os"
        "runtime"
        "runtime/cgo"
@@ -65,7 +66,6 @@ import (
        "github.com/apache/arrow/go/v16/arrow/cdata"
        "github.com/apache/arrow/go/v16/arrow/memory"
        "github.com/apache/arrow/go/v16/arrow/memory/mallocator"
-       "golang.org/x/exp/slog"
 )
 
 // Must use malloc() to respect CGO rules
@@ -73,8 +73,7 @@ var drv = panicdummy.NewDriver(mallocator.NewMallocator())
 
 // Flag set if any method panic()ed - afterwards all calls to driver will fail
 // since internal state of driver is unknown
-// (Can't use atomic.Bool since that's Go 1.19)
-var globalPoison int32 = 0
+var globalPoison atomic.Bool
 
 const errPrefix = "[PanicDummy] "
 const logLevelEnvVar = "ADBC_DRIVER_PANICDUMMY_LOG_LEVEL"
@@ -159,7 +158,7 @@ func errToAdbcErr(adbcerr *C.struct_AdbcError, err error) 
adbc.Status {
 
 // We panicked; make all API functions error and dump stack traces
 func poison(err *C.struct_AdbcError, fname string, e interface{}) 
C.AdbcStatusCode {
-       if atomic.SwapInt32(&globalPoison, 1) == 0 {
+       if !globalPoison.Swap(true) {
                // Only print stack traces on the first occurrence
                buf := make([]byte, 1<<20)
                length := runtime.Stack(buf, true)
@@ -265,7 +264,7 @@ func (c *cancellableContext) cancelContext() {
 }
 
 func checkDBAlloc(db *C.struct_AdbcDatabase, err *C.struct_AdbcError, fname 
string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -567,7 +566,7 @@ func PanicDummyDatabaseNew(db *C.struct_AdbcDatabase, err 
*C.struct_AdbcError) (
                        code = poison(err, "AdbcDatabaseNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcDatabaseNew: Go panicked, driver is in unknown 
state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -594,11 +593,15 @@ func PanicDummyDatabaseRelease(db *C.struct_AdbcDatabase, 
err *C.struct_AdbcErro
        h := (*(*cgo.Handle)(db.private_data))
 
        cdb := h.Value().(*cDatabase)
-       cdb.db.Close()
-       cdb.db = nil
+       if cdb.db != nil {
+               cdb.db.Close()
+               cdb.db = nil
+       }
        cdb.opts = nil
-       C.free(unsafe.Pointer(db.private_data))
-       db.private_data = nil
+       if db.private_data != nil {
+               C.free(unsafe.Pointer(db.private_data))
+               db.private_data = nil
+       }
        h.Delete()
        // manually trigger GC for two reasons:
        //  1. ASAN expects the release callback to be called before
@@ -708,7 +711,7 @@ type cConn struct {
 }
 
 func checkConnAlloc(cnxn *C.struct_AdbcConnection, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -839,7 +842,7 @@ func PanicDummyConnectionNew(cnxn *C.struct_AdbcConnection, 
err *C.struct_AdbcEr
                        code = poison(err, "AdbcConnectionNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcConnectionNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1284,7 +1287,7 @@ type cStmt struct {
 }
 
 func checkStmtAlloc(stmt *C.struct_AdbcStatement, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -1414,7 +1417,7 @@ func PanicDummyStatementNew(cnxn 
*C.struct_AdbcConnection, stmt *C.struct_AdbcSt
                        code = poison(err, "AdbcStatementNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1445,7 +1448,7 @@ func PanicDummyStatementRelease(stmt 
*C.struct_AdbcStatement, err *C.struct_Adbc
                        code = poison(err, "AdbcStatementRelease", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementRelease: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
diff --git a/go/adbc/pkg/snowflake/driver.go b/go/adbc/pkg/snowflake/driver.go
index e67fc79a9..c894de699 100644
--- a/go/adbc/pkg/snowflake/driver.go
+++ b/go/adbc/pkg/snowflake/driver.go
@@ -52,6 +52,7 @@ import (
        "context"
        "errors"
        "fmt"
+       "log/slog"
        "os"
        "runtime"
        "runtime/cgo"
@@ -65,7 +66,6 @@ import (
        "github.com/apache/arrow/go/v16/arrow/cdata"
        "github.com/apache/arrow/go/v16/arrow/memory"
        "github.com/apache/arrow/go/v16/arrow/memory/mallocator"
-       "golang.org/x/exp/slog"
 )
 
 // Must use malloc() to respect CGO rules
@@ -73,8 +73,7 @@ var drv = snowflake.NewDriver(mallocator.NewMallocator())
 
 // Flag set if any method panic()ed - afterwards all calls to driver will fail
 // since internal state of driver is unknown
-// (Can't use atomic.Bool since that's Go 1.19)
-var globalPoison int32 = 0
+var globalPoison atomic.Bool
 
 const errPrefix = "[Snowflake] "
 const logLevelEnvVar = "ADBC_DRIVER_SNOWFLAKE_LOG_LEVEL"
@@ -159,7 +158,7 @@ func errToAdbcErr(adbcerr *C.struct_AdbcError, err error) 
adbc.Status {
 
 // We panicked; make all API functions error and dump stack traces
 func poison(err *C.struct_AdbcError, fname string, e interface{}) 
C.AdbcStatusCode {
-       if atomic.SwapInt32(&globalPoison, 1) == 0 {
+       if !globalPoison.Swap(true) {
                // Only print stack traces on the first occurrence
                buf := make([]byte, 1<<20)
                length := runtime.Stack(buf, true)
@@ -265,7 +264,7 @@ func (c *cancellableContext) cancelContext() {
 }
 
 func checkDBAlloc(db *C.struct_AdbcDatabase, err *C.struct_AdbcError, fname 
string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -567,7 +566,7 @@ func SnowflakeDatabaseNew(db *C.struct_AdbcDatabase, err 
*C.struct_AdbcError) (c
                        code = poison(err, "AdbcDatabaseNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcDatabaseNew: Go panicked, driver is in unknown 
state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -712,7 +711,7 @@ type cConn struct {
 }
 
 func checkConnAlloc(cnxn *C.struct_AdbcConnection, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -843,7 +842,7 @@ func SnowflakeConnectionNew(cnxn *C.struct_AdbcConnection, 
err *C.struct_AdbcErr
                        code = poison(err, "AdbcConnectionNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcConnectionNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1288,7 +1287,7 @@ type cStmt struct {
 }
 
 func checkStmtAlloc(stmt *C.struct_AdbcStatement, err *C.struct_AdbcError, 
fname string) bool {
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "%s: Go panicked, driver is in unknown state", 
fname)
                return false
        }
@@ -1418,7 +1417,7 @@ func SnowflakeStatementNew(cnxn *C.struct_AdbcConnection, 
stmt *C.struct_AdbcSta
                        code = poison(err, "AdbcStatementNew", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementNew: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
@@ -1449,7 +1448,7 @@ func SnowflakeStatementRelease(stmt 
*C.struct_AdbcStatement, err *C.struct_AdbcE
                        code = poison(err, "AdbcStatementRelease", e)
                }
        }()
-       if atomic.LoadInt32(&globalPoison) != 0 {
+       if globalPoison.Load() {
                setErr(err, "AdbcStatementRelease: Go panicked, driver is in 
unknown state")
                return C.ADBC_STATUS_INTERNAL
        }
diff --git a/go/adbc/sqldriver/driver.go b/go/adbc/sqldriver/driver.go
index 49bf5191a..a1725a9a9 100644
--- a/go/adbc/sqldriver/driver.go
+++ b/go/adbc/sqldriver/driver.go
@@ -468,8 +468,8 @@ func arrFromVal(val any) arrow.Array {
        case string:
                dt = arrow.BinaryTypes.String
                buffers[1] = 
memory.NewBufferBytes(arrow.Int32Traits.CastToBytes([]int32{0, int32(len(v))}))
-               var buf = *(*[]byte)(unsafe.Pointer(&v))
-               (*reflect.SliceHeader)(unsafe.Pointer(&buf)).Cap = len(v)
+
+               buf := unsafe.Slice(unsafe.StringData(v), len(v))
                buffers = append(buffers, memory.NewBufferBytes(buf))
        default:
                panic(fmt.Sprintf("unsupported type %T", val))
diff --git a/r/adbcflightsql/DESCRIPTION b/r/adbcflightsql/DESCRIPTION
index 455fec1cd..f66ac6bef 100644
--- a/r/adbcflightsql/DESCRIPTION
+++ b/r/adbcflightsql/DESCRIPTION
@@ -19,7 +19,7 @@ RoxygenNote: 7.2.3
 Suggests:
     nanoarrow,
     testthat (>= 3.0.0)
-SystemRequirements: GNU make, Go (>= 1.19.13)
+SystemRequirements: GNU make, Go (>= 1.21)
 Config/testthat/edition: 3
 Config/build/bootstrap: TRUE
 URL: https://github.com/apache/arrow-adbc, 
https://arrow.apache.org/adbc/current/r/adbcflightsql/
diff --git a/r/adbcflightsql/tools/download-go.R 
b/r/adbcflightsql/tools/download-go.R
index 4b4909730..5f178f4c8 100644
--- a/r/adbcflightsql/tools/download-go.R
+++ b/r/adbcflightsql/tools/download-go.R
@@ -17,7 +17,7 @@
 
 tmp_dir <- "src/go/tmp"
 
-go_version <- Sys.getenv("R_ADBC_GO_VERSION_DOWNLOAD", "1.19.13")
+go_version <- Sys.getenv("R_ADBC_GO_VERSION_DOWNLOAD", "1.21.8")
 
 go_platform <- tolower(Sys.info()[["sysname"]])
 if (!(go_platform %in% c("darwin", "linux", "windows"))) {
diff --git a/r/adbcsnowflake/DESCRIPTION b/r/adbcsnowflake/DESCRIPTION
index 731c30a04..61d1c7c80 100644
--- a/r/adbcsnowflake/DESCRIPTION
+++ b/r/adbcsnowflake/DESCRIPTION
@@ -20,7 +20,7 @@ Suggests:
     nanoarrow,
     openssl,
     testthat (>= 3.0.0)
-SystemRequirements: GNU make, Go (>= 1.19.13)
+SystemRequirements: GNU make, Go (>= 1.21)
 Config/testthat/edition: 3
 Config/build/bootstrap: TRUE
 URL: https://github.com/apache/arrow-adbc, 
https://arrow.apache.org/adbc/current/r/adbcsnowflake/

Reply via email to