Go言語 sliceのnilについて

へー、と思ったこと。こんな感じのコードを書きます。

package main

import (
    "fmt"
)

func main() {
    var b []string
    c := []string{}

    if b == nil {
        fmt.Println("B")
    }
    if c == nil {
        fmt.Println("C")
    }

}

「B」と「C」の出力が得られると思いきや、実行結果は以下のようになりました。

$ go run hoge.go
B
$

[]string{}で初期化した場合はnilにならないのか...。よくわからないけど知っとかないとヤバいのでメモっときました。