// 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.

module github.com/apache/arrow/go/v7

go 1.15

require (
	github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c
	github.com/andybalholm/brotli v1.0.3
	github.com/apache/thrift v0.15.0
	github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
	github.com/goccy/go-json v0.7.10
	github.com/golang/protobuf v1.5.2
	github.com/golang/snappy v0.0.4
	github.com/google/flatbuffers v2.0.0+incompatible
	github.com/google/go-cmp v0.5.6 // indirect
	github.com/klauspost/asmfmt v1.3.1
	github.com/klauspost/compress v1.13.6
	github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8
	github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3
	github.com/pierrec/lz4/v4 v4.1.9
	github.com/stretchr/testify v1.7.0
	github.com/zeebo/xxh3 v0.13.0
	golang.org/x/exp v0.0.0-20211028214138-64b4c8e87d1a
	golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
	golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359
	golang.org/x/tools v0.1.4
	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
	gonum.org/v1/gonum v0.9.3
	google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79 // indirect
	google.golang.org/grpc v1.41.0
	google.golang.org/protobuf v1.27.1
)
