message Filter { oneof kind { Tags tags = 1; IPRange ipRange = 2; } }
switch t := f.Kind.(type) { case *Tags: // ... case *IPRange: // ... }
message Filter { string type = 1; Tags tags = 2; IPRange ipRange = 3; }
f = Filter{} f.Type = FilterType_Tags f.IPRange = IPRange{}
if f.Type == FilterType_Tags { useFilter(f.IPRange) }