string?В Go у каждого типа есть zero value - значение по умолчанию при объявлении переменной без инициализации. Для типа string это пустая строка "", а не nil.
Строка в Go - это не указатель, а значение. Типы с zero value nil - это указатели, слайсы, map, каналы, интерфейсы и функции. Примитивные типы (int, string, bool) имеют конкретные zero values.
var s string
fmt.Println(s == "") // true
fmt.Println(len(s)) // 0
// s == nil - ошибка компиляции: нельзя сравнивать string с nil
int, float64 - 0bool - falsestring - ""*T, слайс, map, канал - nil