How to Find a Type of an Object in Go
Data types specify the type associated with a valid Go variable. There are four categories of datatypes in Go which are as follows:
-
Basic type: Numbers, strings, and booleans
-
Aggregate type: Array and structs
-
Reference type: Pointers, slices, maps, functions, and channels
-
Interface type
We can find the data type of an object in Go using string formatting
, reflect
package, and type assertions
.
String Formatting to Find Data Type in Go
We can use the Printf
function of package fmt
with a special formatting option. The available formatting options to display variables using fmt
are:
Format | Description |
---|---|
%v |
Print the variable value in a default format |
%+v |
Add field names with the value |
%#v |
a Go-syntax representation of the value |
%T |
a Go-syntax representation of the type of the value |
%% |
a literal percent sign; consumes no value |
We use the %T
flag in the fmt
package to find a type of an object in Go.
package main
import "fmt"
func main() {
i := 18
fmt.Printf("Datatype of i : %T\n", i)
s := "Dixya Lyaho"
fmt.Printf("Datatype of s : %T\n", s)
f := 25.32
fmt.Printf("Datatype of f : %T\n", f)
}
Output:
Datatype of i : int
Datatype of s : string
Datatype of f : float64
reflect
Package
We can also use the reflect
package to find datatype of an object. The Typeof
function of reflect
package returns a data type that could be converted to a string
with .String()
.
package main
import (
"fmt"
"reflect"
)
func main() {
o1 := "string"
o2 := 10
o3 := 1.2
o4 := true
o5 := []string{"foo", "bar", "baz"}
o6 := map[string]int{"apple": 23, "tomato": 13}
fmt.Println(reflect.TypeOf(o1).String())
fmt.Println(reflect.TypeOf(o2).String())
fmt.Println(reflect.TypeOf(o3).String())
fmt.Println(reflect.TypeOf(o4).String())
fmt.Println(reflect.TypeOf(o5).String())
fmt.Println(reflect.TypeOf(o6).String())
}
Output:
string
int
float64
bool
[]string
map[string]int
type assertions
Method
Type assertion method returns a boolean variable to tell whether assertion operation succeeds or not. We use a type switch
to do several type assertions in series to find the data type of the object.
package main
import (
"fmt"
)
func main() {
var x interface{} = 3.85
switch x.(type) {
case int:
fmt.Println("x is of type int")
case float64:
fmt.Println("x is of type float64")
default:
fmt.Println("x is niether int nor float")
}
}
Output:
x is of type float64
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn