var slice []string fmt.Println(slice == nil)
slice := []string{} fmt.Println(slice == nil)
The language just has a bad habit of confusing them some of the time, but not consistently, so you can still occasionally get bit by the difference
As someone who uses Go a lot, it's just one of those things...