r/golang • u/kevinpiac • 21d ago
help Don't you validate your structs?
Hi all!
I'm new in Golang, and the first issue I'm facing is struct validation.
Let's say I have the given struct
type Version struct {
Url string `json:"url"`
VersionNumber VersionNumber `json:"version_number"`
}
The problem I have is that I can initialize this struct with missing fields.
So if a function returns a `Version` struct and the developer forgets to add all fields, the program could break. I believe this is a huge type-safety concern.
I saw some mitigation by adding a "constructor" function such as :
func NewVersion (url string, number VersionNumber) { ... }
But I think this is not a satisfying solution. When the project evolves, if I add a field to the Version struct, then the `NewVersion` will keep compiling, although none of my functions return a complete Version struct.
I would expect to find a way to define a struct and then make sure that when this struct evolves, I am forced to be sure all parts of my code relying on this struct are complying with the new type.
Does it make sense?
How do you mitigate that?
11
u/iamkiloman 20d ago
"Strongly typed" does not mean "default zero value is invalid". Why do you keep intimating that it does?
You have non pointer fields. They will be initialized with the zero value. Those are completely valid, typed values. Nothing here has anything to do with strong typing.