This is a created article in which the information may have evolved or changed.
Some of the types in the Golang can be assigned nil, and some types cannot be assigned a value of nil.
You cannot assign nil to a type that initialized value is not nil, for example:
bool
int, IntN
UINT, UINTN
Floatn
Complexn
Byte
Rune
String
struct
You can assign nil to a type that initialized value is nil, for example:
Array
Slice
Map
Chan
Func
Interface
Pointer
But there is another problem with these types, which can be used to initialize the list with {}.
Simply understood, {} can be used to initialize the list with {} in the type definition. Otherwise, you can't.
bool
int, IntN
UINT, UINTN
Floatn
Complexn
Byte
Rune
String
Chan
Pointer
Cannot use {} to initialize the list
But
Array
Slice
Map
struct
You can use {} to initialize the list.
The above is just a simple understanding, the exact answer also refer to the official go information.