In #21031, this can be optimized to reduce the Pointer,usage atomic-operate for any type, as shown in https://go-review.googlesource.com/c/go/+/617695 .
But we need support for setting atomic values to nil, and we also need a way to represent deleted values. The current practice is to make a spin lock using the typ field of any. I want to ask if we can do better this way: typ remains unchanged after the first setting,Cases such as being deleted are represented by a special internal package pointer, which is set to data field. An example to illustrate this approach: ```go package main import ( "sync/atomic" "unsafe" ) var delete byte func main() { var v atomic.Value var i int = 1 v.Store(i) // Make a any , it is typ=int meta data,data=&byte nv := new_delete(getIntType()) // Indicates deleted v.Store(nv) } type iface struct { typ, data unsafe.Pointer } func new_delete(typ unsafe.Pointer) any { ret := iface{ typ: typ, data: unsafe.Pointer(&delete), } return *(*any)(unsafe.Pointer(&ret)) } func getIntType() unsafe.Pointer { var i int var a any = i var as *iface = (*iface)(unsafe.Pointer(&a)) return as.typ } ``` -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/837cf1c6-0982-4913-a54b-cf166afb191en%40googlegroups.com.