github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/log/handler_go13.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:39</date> 10 //</624450097773547520> 11 12 //+建设!GO1.4 13 14 package log 15 16 import ( 17 "sync/atomic" 18 "unsafe" 19 ) 20 21 //swaphandler包装了另一个可以换出的处理程序 22 //在运行时以线程安全的方式动态运行。 23 type swapHandler struct { 24 handler unsafe.Pointer 25 } 26 27 func (h *swapHandler) Log(r *Record) error { 28 return h.Get().Log(r) 29 } 30 31 func (h *swapHandler) Get() Handler { 32 return *(*Handler)(atomic.LoadPointer(&h.handler)) 33 } 34 35 func (h *swapHandler) Swap(newHandler Handler) { 36 atomic.StorePointer(&h.handler, unsafe.Pointer(&newHandler)) 37 } 38