Golang框架Go2linq v4.0.0-beta.1发布,现已基于Go 1.23

Golang框架Go2linq v4.0.0-beta.1发布,现已基于Go 1.23

go2linq

go2linq v4 是 .NET LINQ to Objects 的 Go 语言实现。


安装

go get github.com/solsw/go2linq/v4

示例

go2linq 的使用示例位于测试文件中的 Example... 函数里。

快速简易示例:

package main

import (
	"fmt"

	"github.com/solsw/go2linq/v4"
)

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

上述代码输出如下:

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

更多关于Golang框架Go2linq v4.0.0-beta.1发布,现已基于Go 1.23的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang框架Go2linq v4.0.0-beta.1发布,现已基于Go 1.23的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go2linq v4.0.0-beta.1基于Go 1.23的发布是个重要的更新,特别是利用了Go 1.23的range over func特性,这能显著提升API的易用性和性能。之前的版本需要手动迭代Enumerable,现在可以直接用range遍历,代码更简洁。

下面是一个对比示例,展示新特性的优势:

v4.0.0-beta.1之前(需要手动迭代):

package main

import (
    "fmt"
    "github.com/solsw/go2linq/v4"
)

func main() {
    src := go2linq.VarToSeq(1, 2, 3, 4, 5)
    enr := src.GetEnumerator()
    for enr.MoveNext() {
        fmt.Println(enr.Current())
    }
}

v4.0.0-beta.1之后(支持range over func):

package main

import (
    "fmt"
    "github.com/solsw/go2linq/v4"
)

func main() {
    src := go2linq.VarToSeq(1, 2, 3, 4, 5)
    for v := range src {
        fmt.Println(v)
    }
}

新版本还优化了链式操作。结合Go 1.23的range over func,现在可以这样写:

package main

import (
    "fmt"
    "github.com/solsw/go2linq/v4"
)

func main() {
    // 链式操作:过滤偶数,然后转换为字符串
    result := go2linq.VarToSeq(1, 2, 3, 4, 5, 6, 7, 8).
        Where(func(i int) bool { return i%2 == 0 }).
        Select(func(i int) string { return fmt.Sprintf("Even: %d", i) })
    
    // 直接使用range遍历
    for s := range result {
        fmt.Println(s)
    }
}

输出:

Even: 2
Even: 4
Even: 6
Even: 8

对于更复杂的查询,比如分组统计,新API也更清晰:

package main

import (
    "fmt"
    "github.com/solsw/go2linq/v4"
)

func main() {
    words := go2linq.VarToSeq("apple", "banana", "apricot", "blueberry", "avocado")
    
    // 按首字母分组并统计每组的数量
    groups := go2linq.GroupBy(
        words,
        func(w string) byte { return w[0] },
        func(w string) string { return w },
    )
    
    for g := range groups {
        fmt.Printf("Letter '%c': %d items\n", g.Key, go2linq.Count(g.Values))
    }
}

这次更新充分利用了Go 1.23的新特性,让go2linq的API更加符合Go语言的习惯,特别是在集合操作方面提供了更好的开发体验。

回到顶部