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

网站名超链接怎么做网站开发怎么用自己的电脑

网站名超链接怎么做,网站开发怎么用自己的电脑,上海外贸seo公司,仁寿网站建设golang 函数式编程库samber/mo使用#xff1a; Future 如果您对samber/mo库不了解#xff0c; 请先阅读第一篇 Option 本节讲述Future的使用#xff0c;它可以帮助我们处理异步编程问题。 示例 我们先来看看下面代码的示例#xff0c; 注释解释了每一步的操作。 packa…golang 函数式编程库samber/mo使用 Future 如果您对samber/mo库不了解 请先阅读第一篇 Option 本节讲述Future的使用它可以帮助我们处理异步编程问题。 示例 我们先来看看下面代码的示例 注释解释了每一步的操作。 package mainimport (fmtgithub.com/samber/mo )func main() {// resolve 在这里只是一个定义 NewFuture会以一个 goroutine 的方式执行 cb 并且传递Future 的 resolve 和 rejectvalue, err : mo.NewFuture(func(resolve func(string), reject func(error)) {// do something hereif true { // 这里假定 do something 成功// 如果 do something 成功 执行 resolve 并传递一个值 然后会执行 Thenresolve(foobar)} else {// 告诉 do something 失败 执行 reject 并传递一个错误 然后会执行 Catchreject(fmt.Errorf(failure))}}).Then(func(s string) (string, error) {// 这里 s 就是 resolve 传递的值return s, nil}).Catch(func(err error) (string, error) {// 这里 err 就是 reject 传递的错误return foobar, nil}).Finally(func(value string, err error) (string, error) {// 不管发生什么都会执行 value 是 resolve 传递的值 err 是 reject 传递的错误return value, nil}).Collect() // 等待 future 执行完毕 并返回最终的值fmt.Println(value)fmt.Println(err)// Output:// foobar// nil } 源码解析 根据mo.NewFuture的实现 可以看出该函数做的事情就是构造一个Future 然后执行activate函数 activate实际就是用 goroutine 执行cb函数 并且将 Future 的 resolve 和 reject函数作为参数传递给cb。 func NewFuture[T any](cb func(resolve func(T), reject func(error))) *Future[T] {future : Future[T]{cb: cb,cancelCb: func() {},done: make(chan struct{}),}future.active()return future }func (f *Future[T]) active() {go f.cb(f.resolve, f.reject) }resolve的实现如下 可以看到resolve做的事情就是用mo.OK包装value 记录到result中并且关闭f.done 表明future已经完成。 resolve加锁的目的是为了确保后续Then或Finally不会同时进行。 func (f *Future[T]) resolve(value T) {f.mu.Lock()defer f.mu.Unlock()f.result Ok(value)if f.next ! nil { // 这里如果不为空表明next先于something注册需要执行f.next.activeSync()}close(f.done) }我们来看看Then的实现这个函数先对f执行加锁 然后构造一个新的Future这个新的Future的cb函数就是为了判断f的执行结果 如果f的result不是error 就执行Then注册的回调 cb。 所以如果f.cb函数执行resolve后返回 f.result.IsError()为false 会执行Then中的回调。 最后的select表示如果f已完成用goroutine 执行Then中的回调。如果f还没有完成则留待f.cb的resolve或reject执行Then的回调。两种情况都会直接返回f.next不会阻塞。这样就实现了Future的串联。 func (f *Future[T]) Then(cb func(T) (T, error)) *Future[T] {f.mu.Lock()defer f.mu.Unlock()f.next Future[T]{cb: func(resolve func(T), reject func(error)) {if f.result.IsError() {reject(f.result.Error())return}newValue, err : cb(f.result.MustGet())if err ! nil {reject(err)return}resolve(newValue)},cancelCb: func() {f.Cancel()},done: make(chan struct{}),}select {case -f.done:f.next.active()default:}return f.next }Catch和Then的区别是如果f.result是error 就执行Catch中的回调。Finally是不管f.result是什么 都会执行Finally中的回调。 最后的Collect是用于等待Future执行完毕 并返回最终的值。 func (f *Future[T]) Collect() (T, error) {-f.donereturn f.result.Get() }还有 Result 和 Either方法 用于获取Future的执行结果 会阻塞直到Future执行完毕也就是先执行Collect)
http://www.pierceye.com/news/264026/

相关文章:

  • 南京哪家网站建设好网站开发需要注意的
  • 一个综合网站上线多少钱wordpress粘贴word
  • 承接电商网站建设新手做自己的网站
  • 网页版视频网站建设需要多少钱四川鸿业建设集团公司网站
  • h5网站实例wordpress改造mip
  • 完整的网络营销推广方案包括优化营商环境心得体会个人
  • 商洛市住房和城乡建设局网站建免费网站
  • 做网站要多少的服务器网站设计的步骤
  • 网站关键词怎么做上首页wordpress 架构原理
  • 厦门专业网站建设代理国外在线crm系统suitecrm
  • 哪个网站可以领手工活在家做wordpress heroku
  • 为什么没有网站做图文小说电子商务网站开发的课程介绍
  • 在哪个网站做问卷好单页面网站推广
  • 专业网站建设模块维护静海网站建设
  • 国内前十网站建设公司龙之网官网
  • 昆山做网站的公昆山做网站的公司司网站开发与设计岗位职责
  • 网站投注员怎么做做旅游项目用哪家网站好
  • 环县网站怎么做咸阳网站开发公司地址
  • 重庆巴南网站制作wordpress外贸建站公司
  • 桂林旅游网站制作公司软件开发公司属于什么行业
  • 网站 备案 中国 名字老薛主机 wordpress
  • 有什么网站可以做投票功能合肥房地产交易网
  • 世界网站广西建设工程质检安全网站
  • 建设银行网站会员基本信息wordpress主题图片丢失
  • 找人做网站需要注意什么问题中国建设信用卡网站
  • 公众号制作的网站开发营销平台推广
  • 河源手机网站制作网站页面效果图怎么做
  • 公司网站建设要注意的问题wordpress上传图片x
  • 网站开发PHP留言本快代理
  • 温州做网站价格怎么做简易手机网站