I have this string to create with a Sprintf
message := fmt.Sprintf("Unit %s has a Level of %v, but is of Category %v",
    *entity.Name, *entity.LevelCode, *entity.CategoryCode)
In entity, the variables are pointers that can be nil:
- Nameis a- *string
- LevelCodehas a- *LevelCodetype
- CategoryCodehas a- *CategoryCodetype
but if they have a value, I want this value and not the pointers. (i.e. Unit ABC has a Level of nil, but is of Category AdministrativeUnit)
in any language, I would have wrote:
message := fmt.Sprintf("Unit %s has a Level of %v, but is of %v Category",
    entity.Name != nil ? *entity.Name : "nil", entity.LevelCode != nil ? *entity.LevelCode : "nil", entity.CategoryCode != nil ? *entity.CategoryCode : "nil")
But Go doesn't allow ternary operator. And if I don't take care of nil values, Sprintf will throw an exception.
So, do I have to start that way?
if entity.Name == nil && entity.LevelCode != nil && entity.CategoryCode != nil) {
   message := "Unit nil has a Level of nil, but is of nil Category"
}
else {
   if entity.Name != nil && entity.LevelCode != nil && entity.CategoryCode != nil) {
     message := fmt.Sprintf("Unit %s has a Level of nil, but is of nil Category",
    entity.Name != nil ? *entity.Name : "nil")
   }
   else {
      ...
     for 9 combinations of values nil or not nil values, and 9 sprintf formats?
   }
}
What the shortest way to dump my variables content in a formatted line?
