Skill

go-nil-interface

Interface nil trap - typed nil is not nil

From golang-workflow
Install
1
Run in your terminal
$
npx claudepluginhub jamesprial/prial-plugins --plugin golang-workflow
Tool Access

This skill uses the workspace's default tool permissions.

Skill Content

Interface Nil Trap

Problem

A typed nil pointer stored in an interface is NOT nil.

Pattern

WRONG - Typed nil escapes

func GetUser(id int) error {
    var err *MyError  // typed nil
    if id < 0 {
        err = &MyError{"invalid id"}
    }
    return err  // Returns non-nil interface containing nil pointer!
}

if err := GetUser(1); err != nil {
    // This branch RUNS even though no error occurred
    fmt.Println("error:", err)
}

CORRECT - Return untyped nil

func GetUser(id int) error {
    if id < 0 {
        return &MyError{"invalid id"}
    }
    return nil  // Return untyped nil
}

if err := GetUser(1); err != nil {
    // This branch does NOT run
    fmt.Println("error:", err)
}

Why It Happens

Interface contains (type, value). Typed nil has (type=*MyError, value=nil). This is different from (type=nil, value=nil).

Quick Fix

  • Return nil directly, not typed nil variable
  • Or return concrete type, not interface
Stats
Stars1
Forks0
Last CommitJan 19, 2026