Golang中的方法链

简介: 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初始化时的一个故意的错误,该方法链将被失败,错误将被缓存在注册表中。

相关文章
|
3月前
|
缓存 移动开发 Go
golang bufio解析
golang bufio解析
26 0
|
JSON Go 数据格式
Golang 语言怎么使用 panic 函数?
Golang 语言怎么使用 panic 函数?
86 0
|
6月前
|
编译器 Go
浅谈Golang T和*T方法集的关系
浅谈Golang T和*T方法集的关系
45 0
|
Linux Go 调度
【Golang源码分析】golang的启动原理
【Golang源码分析】golang的启动原理
59 0
|
存储 设计模式 Go
Golang interface 接口详细原理和使用技巧
Golang interface 接口详细原理和使用技巧
学习golang(8) 初探:接口(2)
学习golang(8) 初探:接口(2)
81 0
|
存储 Java Go
学习golang(8) 初探:接口(1)
学习golang(8) 初探:接口(1)
88 0
|
运维 NoSQL 编译器
学习golang(8) 初探:方法
学习golang(8) 初探:方法
89 0
|
程序员 Go
一文搞懂Golang中的接口
一文搞懂Golang中的接口
123 0