No, you’ve achieved an illusion of that as now your spending hours wasted on discovering where a developer forgot to call NewUsername and instead called Username{“broken”}. I cant see the value in this abstraction in Go.
In my opinion, this pattern breaks when the validation must return an error and everything becomes very verbose.