Eh, the performance difference is likely to be negligible. Especially since you can define the receiver methods on the struct value, which makes it basically the same operation underneath. It's mostly nice (to me) because you avoid having unsafe.Pointer() everywhere (and the type-unsafety it implies), and you can store other fields in the struct if you want (like storing the context for values to make the API nicer).