当前位置:   article > 正文

Go语言中忘记字符串格式化可能产生的副作用

Go语言中忘记字符串格式化可能产生的副作用

        格式化字符串是开发人员经常要进行操作,无论是返回错误还是记录消息。但在处理并发应用程序时,开发人员很容易忘记字符串格式化带来的潜在副作用。下面将看到两个具体示例:一个是读取etcd存储导致数据竞争,另一个是导致死锁的情况。

1. etcd数据竞争

        etcd是一个用Go实现的分布式键值存储,它在包括Kubernetes在内在的许多项目中用于存储所有集群数据。它提供了与集群交互的API。例如,Watcher接口用于接收数据变化的通知:

  1. type Watcher interface {
  2. / Watch watches on a key or prefix. The watched events will be returned
  3. / through the returned channel.
  4. / ...
  5. Watch(ctx context.Context, key string, opts ...OpOption) WatchChan
  6. Close() error
  7. }

        API 依赖于gRPC流。gRPC流是一种在客户端和服务器之间不断交换数据的技术。服务器必须维护使用此功能的所有客户端的列表。因此,Watcher接口由包含所有活动流的watcher结构体实现:

  1. type watcher struct {
  2. / ...
  3. / streams hold all the active gRPC streams keyed by ctx value.
  4. streams map[string]*watchGrpcStream
  5. }

map的键基于调用Watch方法时提供的上下文:

func (w *watcher) Watch
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/445617
推荐阅读
相关标签
  

闽ICP备14008679号