Pau*_*kin 7

syncProducer
syncProducer
RLock

与其明确地使用 RWLocks,不如使用它(假设目标是延迟初始化变量):

var (
    syncOnce sync.Once
    syncProducerInternal *syncProducerType
)

func syncProducer() *syncProducerType {
    syncOnce.Do(func() { syncProducerInternal = createSyncKafkaProducer() })
    return syncProducerInternal
}
syncProducer()
  • @SwiftD 指针可以在读取时部分写入 RAM。然后你可能会得到一些 0 字节和一些指针字节。所以不是零,但也不是有效的指针。正如我在问题中所说,这是否真的会发生取决于体系结构等。如果稍后在读取变量时获取读取锁可能仍然可以,但我想这段代码的重点是避免这种情况。 (2认同)
  • 锁定的很好解释 https://launchdarkly.com/blog/golang-pearl-thread-safe-writes-and-double-checked-locking-in-go/ (2认同)