Types in Go

Check variable type

The type of a variable in Go can be retrieved by formatting the output:

var stringVar string
fmt.Printf("Type: %T\n", stringVar)

The example above outputs: Type: string.

Another way of obtaining the variable type is to use reflect.TypeOf.

var stringVar string
fmt.Printf("reflect.TypeOf(): %s\n", reflect.TypeOf(stringVar))

The example above outputs: reflect.TypeOf(): string.

reflect package can be also used to get the kind of type of a variable. For exmaple, whether a variable is a struct, a slice, a map, or a pointer.

type SomeCustomType struct{}
var someCustomType SomeCustomType
fmt.Printf("reflect.TypeOf().Kind(): %s\n", reflect.TypeOf(someCustomType).Kind())

The example above outputs: reflect.TypeOf().Kind(): struct.

Some more examples for other types:

import (

type SomeCustomType struct{}

var (
	stringVar               string
	someCustomType          SomeCustomType
	sliceOfSomeCustomType   []SomeCustomType
	mapStringSomeCustomType map[string]SomeCustomType
	pointerToSomeCustomType *SomeCustomType

func printType(v any) {
	fmt.Printf("Type: %T\n", v)
	fmt.Printf("reflect.TypeOf(): %s\n", reflect.TypeOf(v))
	fmt.Printf("reflect.TypeOf().Kind(): %s\n\n", reflect.TypeOf(v).Kind())

func main() {

The example above outputs:

Type: string
reflect.TypeOf(): string
reflect.TypeOf().Kind(): string

Type: main.SomeCustomType
reflect.TypeOf(): main.SomeCustomType
reflect.TypeOf().Kind(): struct

Type: []main.SomeCustomType
reflect.TypeOf(): []main.SomeCustomType
reflect.TypeOf().Kind(): slice

Type: map[string]main.SomeCustomType
reflect.TypeOf(): map[string]main.SomeCustomType
reflect.TypeOf().Kind(): map

Type: *main.SomeCustomType
reflect.TypeOf(): *main.SomeCustomType
reflect.TypeOf().Kind(): ptr