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

相关文章
|
2月前
|
Go
Golang语言基于GOPATH方式管理包(package)
这篇文章详细介绍了Golang语言中基于GOPATH方式管理包(package)的方法,包括包的概述、定义、引入格式、别名使用、匿名引入,以及如何快速入门自定义包,并通过具体代码案例展示了包的环境准备、代码编写、细节说明和程序运行。
37 3
|
3月前
|
Go 开发者
如何使用 Golang 实现继承:详细指南
【8月更文挑战第31天】
180 0
|
JSON Go 数据格式
Golang 语言怎么使用 panic 函数?
Golang 语言怎么使用 panic 函数?
81 0
|
6月前
|
编译器 Go
浅谈Golang T和*T方法集的关系
浅谈Golang T和*T方法集的关系
43 0
|
缓存 Kubernetes 安全
Golang channel 的本质
Golang channel 的本质
71 0
|
存储 Java Go
学习golang(8) 初探:接口(1)
学习golang(8) 初探:接口(1)
86 0
学习golang(8) 初探:接口(2)
学习golang(8) 初探:接口(2)
79 0
|
运维 NoSQL 编译器
学习golang(8) 初探:方法
学习golang(8) 初探:方法
88 0
|
程序员 Go
一文搞懂Golang中的接口
一文搞懂Golang中的接口
120 0