Database-agnostic user model in Golang
I like your approach:


First you've defined an interface on accepting side of application. So you can fix requirements to parts responsible for storage. 
Realisation is not tied to interface. Today you may use PostgreSQL, later you may add some sharding on application side, or even migrate to another DB. Keeping db-related logic in one place helps you do it in future.
Next you can cover it with tests to ensure logics won't get broken in future impovements.