type inference in Go
When declaring a variable without specifying an explicit type (either by using the := syntax or var = expression syntax), the variable's type is inferred from the value on the right hand side. ``` var i int j := i // j is an int ``` But when the right hand side contains an untyped numeric constant, the new variable may be an int, float64, or complex128 depending on the precision of the constant: ``` i := 42 // int f := 3.142 // float64 g := 0.867 + 0.5i // complex128 ```