Skip to content

Comment on A new experimental Go API for JSONparent

Comments

No, empty slices and empty maps in Go are not nil.

This is the idiomatic way of declaring empty slices in Go, and it prints true:

    var slice []string
    fmt.Println(slice == nil)

Whether to judge the line below idiomatic, or not, is a question I leave to the authorities -- but it is highly convenient, and prints "false".

  slice := []string{}
  fmt.Println(slice == nil)

This is indeed a nil slice, and it does have len() == 0, but Go also has a concept of empty slices separate from nil slices

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...

Yes because it's nil. You declared it but not created. Same for map. Same for var something *string

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.