reform
A better ORM for Go, based on non-empty interfaces and code generation
...We are essentially working against those tools by sidestepping type system. First version is still invalid, since one would expect Save() method to set record's primary key after INSERT, but this change will be lost due to passing by value.