|
|
|
|
|
by atombender
2702 days ago
|
|
No, "oneof" increases type safety. "oneof" describes mutually exclusive fields. For example: message Filter {
oneof kind {
Tags tags = 1;
IPRange ipRange = 2;
}
}
With this in place, a client has to check the type of the filter in order to access the actual filter: switch t := f.Kind.(type) {
case *Tags:
// ...
case *IPRange:
// ...
}
Without it, you can get into a situation where it's possible to create invalid combinations: message Filter {
string type = 1;
Tags tags = 2;
IPRange ipRange = 3;
}
Now you can accidentally end up with code like this: f = Filter{}
f.Type = FilterType_Tags
f.IPRange = IPRange{}
or: if f.Type == FilterType_Tags {
useFilter(f.IPRange)
}
|
|