Go Nil Slice

Slice zero-value behavior - nil slice is usable Use when this capability is needed.

tomevault-io Updated

File contents

Slice Zero-Value

Problem

Nil slices are valid and usable, but behavior differs from empty slices.

Pattern

CORRECT - Nil slice works with append

var s []int  // nil slice
s = append(s, 1, 2, 3)  // OK, creates new backing array
fmt.Println(s)  // [1 2 3]

Nil vs Empty Slice

var nilSlice []int           // nil slice
emptySlice := []int{}        // empty slice (non-nil)

len(nilSlice) == 0           // true
len(emptySlice) == 0         // true

nilSlice == nil              // true
emptySlice == nil            // false

json.Marshal(nilSlice)       // "null"
json.Marshal(emptySlice)     // "[]"

When It Matters

// JSON encoding differs
type Response struct {
    Items []string  // Will encode as null if nil, [] if empty
}

Quick Fix

  • Nil slices work with append, len, range
  • Use nil for "no data", []T{} for "empty data"
  • Check JSON encoding behavior if needed

Converted and distributed by TomeVault — claim your Tome and manage your conversions.

tomevault-io/skills-registry/tree/main/jamesprial--claudefiles--slice commit 8c7d35236b

Frequently asked questions

npx skillmds@latest add tomevault-io/go-nil-slice