当前位置: 首页 > news >正文

北京网站开发网络公司吉林最新消息今天新增

北京网站开发网络公司,吉林最新消息今天新增,汕头房产网,品牌网站建设磐石网络优等golang 函数式编程库samber/mo使用: IO 如果您不了解samber/mo库, 请先阅读第一篇 Option 在函数式编程中,副作用和纯函数是最常见的概念。 IO用来封装IO这类副作用。 什么是副作用 副作用是在计算结果的过程中,改变了系统状态…

golang 函数式编程库samber/mo使用: IO

如果您不了解samber/mo库, 请先阅读第一篇 Option

在函数式编程中,副作用和纯函数是最常见的概念。 IO用来封装IO这类副作用。

什么是副作用

副作用是在计算结果的过程中,改变了系统状态或者与外部世界进行了可观察的交互。副作用包括但不限于:

  • 操作文件系统
  • 往数据库插入记录
  • 调用http请求
  • 修改全局变量
  • 打印日志
  • 访问系统状态

副作用之所以不好,是因为它使得代码难以理解和测试。当系统状态或者外界环境发生变化时, 同一段代码的执行会产生不同的结果。如下所示:

var globalVar intfunc incrementGlobalVar() {globalVar++
}func main() {fmt.Println("Before:", globalVar)incrementGlobalVar()fmt.Println("After:", globalVar)
}

什么是纯函数

纯函数是指一个函数,给定相同的输入,总是返回相同的输出,并且没有任何可观察的副作用。不取决于系统状态,也不会对系统状态进行修改。 这类函数具有参数透明性、可测试性、并行性等诸多优秀特性, 所以我们偏好纯函数。但是只有纯函数也是不可能的, 我们必然会和外界进行交互, 所以只能尽可能得进行隔离。mo.IO就是用来包装IO操作的。

IO的使用

我们通过一个例子说明IO的使用, 我们写一个判断是否周末的函数, 这需要依赖系统时间。我们可以用mo.NewIO将这个依赖封装起来, 用 Run函数正式执行获取今天是周几。

package mainimport ("time""github.com/samber/mo"
)func checkIfTodayWeekend(today mo.IO[int]) bool {result := today.Run()return result%6 == 0 || result%7 == 0
}func main() {today := mo.NewIO(func() int {return int(time.Now().Weekday())})println("today is %v", today.Run())println("today is weekend? %v", checkIfTodayWeekend(today))
}

由于我们隔离了系统依赖, 测试变得非常简单

package mainimport ("testing""github.com/samber/mo"
)func TestCheckIfTodayWeekend(t *testing.T) {// Mock the current day of the week as Tuesday (2)today := mo.NewIO(func() int { return 2 })isWeekend := checkIfTodayWeekend(today)if isWeekend {t.Errorf("Expected false for Tuesday, but got true")}// Mock the current day of the week as Saturday (6)today = mo.NewIO(func() int { return 6 })isWeekend = checkIfTodayWeekend(today)if !isWeekend {t.Errorf("Expected true for Saturday, but got false")}// Mock the current day of the week as Sunday (7)today = mo.NewIO(func() int { return 7 })isWeekend = checkIfTodayWeekend(today)if !isWeekend {t.Errorf("Expected true for Sunday, but got false")}
}
http://www.yayakq.cn/news/813206/

相关文章:

  • 兰州展柜公司网站建设上海市有哪些公司
  • 建设网站申请空间需要多少钱wordpress调用二级分类目录
  • 国内最大的软件开发商成都官网seo厂家
  • 做医药代表去什么招聘网站seo网站优化方法
  • 网站建设费计入什么科目比较好<网站建设与运营》
  • 河北通信网站建设网站建设怎么用长尾做标题
  • 建设银行网站查余额阜阳市建设工程质量检测站网站
  • 惠州营销网站建设公司互联网技术包括哪些
  • 网站的代码在哪里设置北京王府井在几环
  • 苏州网络科技公司建网站整个网站全是图片做的
  • 制作网页心得做网站优化好的网络公司
  • 网站程序 seo基于wordpress的博客
  • 梦扬科技 合肥网站建设jsp网站开发工具
  • 商城网站建设 优帮云下什么软件做网站
  • 重庆市建设工程管理协会网站活动线报资源网
  • iis网站权限怎么设置网页加速器手机版
  • 如何区分官方网站和空壳网站深圳南园网站建设
  • 盐城市网站建设公司布局网站开发
  • 更新网站怎么弄seo提升关键词排名
  • 网站建设与运行的盈利收入黑龙江省中国建设银行网站首页
  • 专业做室内设计的网站有哪些内容建设网站女装名字大全
  • 网站网络投票建设步骤合肥网站建合肥网站建设找蓝领商务
  • 河南官网网站建设wordpress cart
  • 怎样学做企业网站Wordpress用户名是哪个
  • 做私人小网站赚钱吗iis网站伪静态网站
  • 网站建设代理公司wordpress换网址插件
  • 宿迁市建设局网站互联网+创新创业大赛
  • 专业网站建设案例手机app下载平台哪个好
  • 青岛网站建设公司报价自己想做个网站需要多少钱
  • 公司网站怎么登录做轮播海报的网站