前言:
目前我们对“fp编程”都比较关切,咱们都想要剖析一些“fp编程”的相关内容。那么小编同时在网上收集了一些有关“fp编程””的相关内容,希望看官们能喜欢,朋友们快快来了解一下吧!大家好,又见面了,我是 GitHub 精选君!
背景介绍
在编程领域中,函数式编程是一种编程范式,它将计算视为函数的评估,避免改变状态和可变数据。然而,Go 语言并没有内建对函数式编程的支持,这使得在 Go 语言中实现函数式编程变得困难。
今天要给大家推荐一个 GitHub 开源项目 IBM/fp-go,该项目在 GitHub 有超过 1.1k Star,用一句话介绍该项目就是:“functional programming library for golang”。给 Go 语言插上翅膀。
项目介绍
fp-go 是一个功能强大的函数式编程库,专为 Go 语言设计。它的设计目标是提供一套数据类型和函数,使得在 Go 语言中编写可维护和可测试的代码变得简单而有趣。它鼓励以下编程开发模式:
1、编写许多小型、可测试和纯函数;
2、提供帮助器以将副作用隔离到延迟执行的函数(IO)中;
3、公开一致的组合集,以从现有函数创建新函数。
此外,每个数据类型都有一小组组合函数,这些函数在所有数据类型中的名称相同,因此你只需要学习少量的函数名称,同名函数的语义在所有数据类型中都是一致的。
如何使用
首先,你需要使用 "go get github.com/IBM/fp-go" 命令来获取这个库。然后,你可以参考提供的样本来开始使用。这个库强烈推崇使用小型、纯粹的函数,这些函数只根据它们的输入产生输出,不执行任何副作用。同时,它提供了一些帮助器,可以将副作用隔离到延迟执行的函数(IO)中。
以下是一个简单的示例,并行发起多个 HTTP 请求。
package httpimport ( "context" "fmt" "testing" HTTP "net/http" A "github.com/IBM/fp-go/array" R "github.com/IBM/fp-go/context/readerioeither" H "github.com/IBM/fp-go/context/readerioeither/http" E "github.com/IBM/fp-go/either" F "github.com/IBM/fp-go/function" IO "github.com/IBM/fp-go/io" "github.com/stretchr/testify/assert")type PostItem struct { UserId uint `json:"userId"` Id uint `json:"id"` Title string `json:"title"` Body string `json:"body"`}func idxToUrl(idx int) string { return fmt.Sprintf(";, idx+1)}// TestMultipleHttpRequests shows how to execute multiple HTTP requests in parallel assuming// that the response structure of all requests is identical, which is why we can use [R.TraverseArray]func TestMultipleHttpRequests(t *testing.T) { // prepare the http client client := H.MakeClient(HTTP.DefaultClient) // readSinglePost sends a GET request and parses the response as [PostItem] readSinglePost := H.ReadJson[PostItem](client) // total number of http requests count := 10 data := F.Pipe3( A.MakeBy(count, idxToUrl), R.TraverseArray(F.Flow3( H.MakeGetRequest, readSinglePost, R.ChainFirstIOK(IO.Logf[PostItem]("Log Single: %v")), )), R.ChainFirstIOK(IO.Logf[[]PostItem]("Log Result: %v")), R.Map(A.Size[PostItem]), ) result := data(context.Background()) assert.Equal(t, E.Of[error](count), result())}项目推介
fp-go 是 IBM 公司开发的一款开源项目,尽管它还在开发中,但已经达到了 1.0 的主要版本。它受到了强大的 fp-ts 的影响,是一个非常有潜力的项目。此外,它遵循了 Go 语言的设计哲学,每个包都有一个单一的目的,明确处理错误,避免包级状态,简单性至上等。如果你在寻找一个能够帮助你在 Go 语言中实现函数式编程的库,那么 fp-go 绝对值得你一试。
以下是该项目 Star 趋势图(代表项目的活跃程度):
更多项目详情请查看如下链接。
开源项目地址:
开源项目作者:IBM
以下是参与项目建设的所有成员:
关注我们,一起探索有意思的开源项目。