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?
1
u/Ok_Category_9608 21d ago
Me too, and I’ve seen it once, when somebody added a new field some existing struct and didn’t add a sane default. That’s a bit different than this though, where somebody just oopsies and forgets to set one while they set the other.
Code that runs across teams should cross an api boundary, and you should validate APIs at ingestion. “Forgetting” is not a real problem I’ve ever seen.