reform
A better ORM for Go, based on non-empty interfaces and code generation
...Now you can say that last invocation is obviously invalid, and that it's not hard to make an ORM to accept both first and second versions. Make sure you are using Go 1.13+, and Go modules support is enabled. Install or update reform package, reform and reform-db commands. Compiler can't check it. Method's signature in godoc will not tell us how to use it. 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.