@gargron I think this has been answered with the sync.Pool bit, but also worth mentioning: IIRC Go handles memory in a way that looks worse than it is, which raised a lot of eyebrows early on. Something along the lines of "Go never fully deallocates memory it's been granted by the OS but marks unused memory as suitable for aggressive paging".
So apparently it can look like it's consuming the entire RAM chip but actually, isn't. But I don't have the OS chops to give more detail/keywords.
@cathal Do you happen to know how to use sync.Pool with objects that require a Close()? Would a defer work inside New() for that? I feel like it wouldn't work because defer executes when current scope is exited, and New() is almost immediately exited...