Go2linq v4.0.0-alpha.12 is released. Go implementation of .NET’s LINQ to Objects


go2linq v4 is Go implementation of .NET’s LINQ to Objects.

go2linq v4 is based on iter.Seq, so it requires setting GOEXPERIMENT=rangefunc when executing go commands.


go get github.com/solsw/go2linq/v4


Examples of go2linq usage are in the Example... functions in test files.

Quick and easy example:

package main

import (


func main() {
	filter, _ := go2linq.Where(
		go2linq.VarAll(1, 2, 3, 4, 5, 6, 7, 8),
		func(i int) bool { return i > 6 || i%2 == 0 },
	squares, _ := go2linq.Select(
		func(i int) string { return fmt.Sprintf("%d: %d", i, i*i) },
	for square := range squares {

The previous code outputs the following:

2: 4
4: 16
6: 36
7: 49
8: 64

As somebody who is a gopher by way of .NET I think this is a great idea. Without some of the language features of .NET (the ability to project into anonymous types, etc.) the Go version will always be more verbose out of necessity, but the ability to quickly write stuff like an in-memory group by is really valuable in my experience.