Thank you everyone for your help. The problem still exists. I am looking for a solution where s and s2 point to the same instance. The current example proves they are different instances. https://go.dev/play/p/_JyfJelhIy4
The main goal is to store any type in a wrapper and then get the reference of the actual struct. Also it must be the same instance, so the println should print 2, 2, 2 But look like there is no obvious solution. :-( On Friday, 25 November 2022 at 08:19:17 UTC Brian Candler wrote: > To give a real-world example: > > https://pkg.go.dev/github.com/prometheus/client_golang/prometheus > > type metrics struct { > cpuTemp prometheus.Gauge > hdFailures *prometheus.CounterVec > } > > Question: why is prometheus.Gauge not a pointer, but > *prometheus.CounterVec is a pointer? > > Answer: because prometheus.Gauge is an interface, whereas > prometheus.CounterVec is a struct. > > An interface essentially already *contains* a pointer to a data value - in > fact, a tuple of (type, pointer). So you should never take a pointer to an > interface. Just pass the interface value, and it will copy the (type, > pointer) pair. > > However, when you extract a value from an interface, it *will* always copy > the internal value. This avoids aliasing issues: someone who passes an > interface value to someone else, won't expect the recipient to be able to > change the sender's copy. > > e.g. > https://go.dev/play/p/u5y3Kwm9Ydz > > Of course, if your interface *contains* a pointer, then the recipient of > the interface can modify the thing being pointed to. > https://go.dev/play/p/o_XAJtNuyGF > > But they can't modify the pointer itself held within the interface, to > make it point to something else. > > The short version is: avoid pointers to interfaces, as the FAQ says. > Instead, let a concrete pointer value satisfy an interface. > > On Friday, 25 November 2022 at 07:40:59 UTC Nigel Tao wrote: > >> Possibly relevant: >> https://go.dev/doc/faq#pointer_to_interface >> > -- 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/948dc8f3-385e-4f50-a44b-ddf4792e6362n%40googlegroups.com.