Type Conversion
"Incompatible types for comparison" is the most common response for the errors when your codes contain things about "Conditional Branching" functions
Preface
Before actually starting, let's discuss why the following codes don't work and output errors.
Case A:
{{$x := "1"}}
{{$y := 1}}
{{if (eq $x $y)}}
True
{{end}}
The output will be like the following picture:

Case B:
{{$x := 1}}
{{if reFind $x "1"}}
True
{{end}}
The output will be like the following picture:

What's wrong with the codes? They seem that they have no problems!
As you can see, the errors are incompatible types for comparison
and wrong type for the value; expected string; got int
. The error message indicates that the type of the value is wrong for the function to use, but how can we fix it? Use the Type Conversion
functions!
Function
Function
Description
json value
Traverses given value
through MarshalJSON (more here) and returns it as type string. For example {{json .TimeHour}}
outputs type string; before this .TimeHour
was of type time.Duration. Basically it's good to use if multistep type conversion is needed (toString (toInt value) )
and certain parts of cembed
need this for example. Example here.
toByte "arg"
Function converts input to a slice of bytes - meaning []uint8. {{toByte "YAG€"}}
would output [89 65 71 226 130 172]
. toString
is capable of converting that slice back to string.
toDuration
Converts the argument, number or string to type time.Duration. Number represents nanoseconds. String can be with time modifier (second, minute, hour, day etc) s, m, h, d, w, mo, y
,without a modifier string will be converted to minutes. Usage:(toDuration x)
. Example here.
toFloat
Converts argument (int or string type of a number) to type float64. Usage: (toFloat x)
. Function will return 0, if type can't be converted to float64.
toInt
Converts something into an integer of type int. Usage: (toInt x)
. Function will return 0, if type can't be converted to int.
toInt64
Converts something into an int64. Usage: (toInt64 x)
. Function will return 0, if type can't be converted to int64.
toRune "arg"
Function converts input to a slice of runes - meaning []int32. {{toRune "YAG€"}}
would output [89 65 71 8364]
. These two functions - the one above, are good for further analysis of Unicode strings. toString
is capable of converting that slice back to string.
toString
Has alias str
. Converts some other type into a string. Usage: (toString x)
.
Example:
To demonstrate
toDuration
, outputs 12 hours from current time in UTC.{{(currentTime.Add (toDuration (mult 12 .TimeHour))).Format "15:04"}}
is the same as{{(currentTime.Add (toDuration "12h")).Format "15:04"}}
or{{(currentTime.Add (toDuration 43200000000000)).Format "15:04"}}
To demonstrate
json value
function.
The value is --- {{.User}}
The type of the initial value is --- {{printf "%T" .User}}
The type after being changed --- {{printf "%T" (json .User)}}
Last updated
Was this helpful?