apache / arrow-go
git clone https://github.com/apache/arrow-go.git
v18.8.0 · 1mo ago
🔥 on GitHub Trending today
Official Go implementation of Apache Arrow
—
stars, 24h
—
stars, 7 days
+12
stars, 30 days · #9,986
415
★ total
158
forks · 43 open issues
Star history (as recorded here)
LanguageAssembly
LicenseApache-2.0
Created2024-08-29 (2y ago)
Last pushtoday
Watchers24
OwnerOrganization
Seen on GitHub Trending
- 2026-10-21 — #12 monthly in assembly · +13 ★
- 2026-10-20 — #12 monthly in assembly · +12 ★
GitHub topics
Links
- GitHub: github.com/apache/arrow-go
- Homepage: https://arrow.apache.org/go/
- Releases · Issues · Hacker News mentions
README excerpt
Apache Arrow for Go =================== [Apache Arrow][arrow] is a cross-language development platform for in-memory data. It specifies a standardized language-independent columnar memory format for flat and hierarchical data, organized for efficient analytic operations on modern hardware. It also provides computational libraries and zero-copy streaming messaging and inter-process communication. ### A note about FlightSQL drivers Go FlightSQL drivers live in the ADBC repository. In particular, to use the Golang `database/sql` interface: [code] DSN option keys are expressed as `k=v`, delimited with `;`. Some options keys are defined in ADBC, others are defined in the FlightSQL ADBC driver. - Arrow ADBC developer doc - ADBC source code - FlightSQL driver option keys source code Reference Counting ------------------ The library makes use of reference counting so that it can track when memory buffers are no longer used. This allows Arrow to update resource accounting, pool memory such and track overall memory usage as objects are created and released. Types expose two methods to deal with this pattern. The `Retain` method will increase the reference count by 1 and `Release` method will reduce the count by 1. Once the reference count of an object is zero, any associated object will be freed. `Retain` and `Release` are safe to call from multiple goroutines. ### When to call `Retain` / `Release`? * If you are passed an object and wish to take ownership of it, you must call `Retain`. You must later pair this with a call to `Release` when you no longer need the object. "Taking ownership" typically means you wish to access the object outside the scope of the current function call. * You own any object you create via functions whose name begins with `New` or `Copy` or when receiving an object over a channel. Therefore you must call `Release` once you no longer need the object. * If you send an object over a channel, you must call `Retain` before sending it as the receiver is assumed to own the object and will later call `Release` when it no longer needs the object. Performance ----------- The arrow package makes extensive use of [c2goasm][] to leverage LLVM's advanced optimizer and generate PLAN9 assembly functions from C/C++ code. The arrow package can be compiled without these optimizations using the `noasm` build tag. Alternatively, by configuring an environment variable, it is possible to dynamically configure which architecture optimizations are used at runtime. We use the cpu package to check dynamically for these features. ### Example Usage The following benchmarks demonstrate summing an array of 8192 values using various optimizations. Disable no architecture optimizations (thus using AVX2): [code] **NOTE:** `NONE` is simply ignored, thus enabling optimizations for AVX2 and SSE4 ---- Disable AVX2 architecture optimizations: [code] ---- Disable ALL architecture optimizations, thus using pure Go implementation: [code] [arrow]: https://