8 ms·
Just to note, for this specific example, Go supports this with type definitions: // UserID and PostID are distinct types type UserID int type PostID i
by metrognome 6y ago
Just to note, for this specific example, Go supports this with type definitions:
// UserID and PostID are distinct types
type UserID int
type PostID int
- neilparikh 6y agoOh neat! Most languages make it a little bit verbose to create these kinds of wrapper types for type safety (with zero overhead), so it's nice that Go has that. I think the generic approach is a little bit better because of the flexibility, but this approach is still better than not having it at all.
- njs12345 6y agoThis isn't quite the same, because it's just an alias - you can pass a UserID to a function accepting a PostID: https://play.golang.org/p/nSOgcJs_66y https://play.golang.org/p/nSOgcJs_66y It still provides a documentation benefit of course. EDIT: Whoops, yes, as lentil points out, they are indeed distinct types not aliases. So it does provide the benefit of the Rust solution.
- lentil 6y agoNo, it's not an alias, they are distinct types. You can't use the types interchangeably (unless you cast them). Your playground example didn't try to pass a UserID to a function accepting a PostID, but if you do that, you'll see the error: https://play.golang.org/p/vyiJ_sLzy4O https://play.golang.org/p/vyiJ_sLzy4O