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
:
Name
is a*string
LevelCode
has a*LevelCode
typeCategoryCode
has a*CategoryCode
type
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?