Golang中的方法链

虽然在Golang中,在某些情况下进行方法改变并不是一个好的习惯,但如果你把你的方法连锁起来,那就很有用了。
这背后的原因是不同的异常处理方式,在另一种编程语言中,在一个chan函数中出现异常时,它会抛出异常,其他方法不会被运行。
在这篇文章中,我将展示我们如何在Golang中实现它。
假设我想有一个应用注册表,想动态地添加客户:

package main

import (
	"errors"
	"fmt"
	"log"
)

type (
	ClientA struct {
   
	}
	ClientB struct {
   
	}
	ClientC struct {
   
	}
)

type Registry struct {
   
	ca  *ClientA
	cb  *ClientB
	cc  *ClientC
	err error
}

func (r *Registry) withClientA() *Registry {
   
	if r.err != nil {
   
		return r
	}
	fmt.Println("client A initialed")
	r.ca = &ClientA{
   }
	return r
}

func (r *Registry) withClientB() *Registry {
   
	if r.err != nil {
   
		return r
	}
	r.err = errors.New("error at initial client B")
	return r
}

func (r *Registry) withClientC() *Registry {
   
	if r.err != nil {
   
		return r
	}
	fmt.Println("client C initialed")
	r.cc = &ClientC{
   }
	return r
}

func main() {
   
	c := Registry{
   }
	d := c.withClientA().withClientB().withClientC()
	if d.err != nil {
   
		log.Fatalf("can not initial Clients due to %v", d.err)
	}
}

output:

client A initialed
2023/02/22 23:14:04 can not initial Clients due to error at initial client B

如果你运行它,你可以看到,由于ClientB初始化时的一个故意的错误,该方法链将被失败,错误将被缓存在注册表中。

相关推荐

  1. Golang方法

    2024-01-31 17:52:01       48 阅读
  2. 初识GolangGolang 结构体和方法

    2024-01-31 17:52:01       38 阅读
  3. Golang实现类似类与继承方法

    2024-01-31 17:52:01       35 阅读
  4. Rust式调用方法

    2024-01-31 17:52:01       110 阅读
  5. Golang方法定义及使用

    2024-01-31 17:52:01       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-31 17:52:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-31 17:52:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-31 17:52:01       82 阅读
  4. Python语言-面向对象

    2024-01-31 17:52:01       91 阅读

热门阅读

  1. 本周黄金价格将面临重大风险事件

    2024-01-31 17:52:01       64 阅读
  2. LRU(Least Recently Used)

    2024-01-31 17:52:01       53 阅读
  3. MySQL 索引 create index 详解

    2024-01-31 17:52:01       64 阅读
  4. linux nodejs无法安装canvas模块

    2024-01-31 17:52:01       57 阅读
  5. c#常用的修饰符

    2024-01-31 17:52:01       59 阅读
  6. C代码,控制亮灯的代码

    2024-01-31 17:52:01       56 阅读
  7. 马可波罗API中的item_get方法详解

    2024-01-31 17:52:01       66 阅读