I have a code, but it gives
panic: runtime error: invalid memory address or nil pointer dereference [recovered] panic: runtime error: invalid memory address or nil pointer dereference
package lab2
import "fmt"
type Errors []error
func (m Errors) Error() string {
err := len(m)
if err == 0 {
return "(0 errors)"
} else if err == 1 {
return m[0].Error()
} else if err == 2 {
return m[0].Error() + " (and 1 other error)"
} else {
return fmt.Sprintf("%s (and %d other errors)", m[0].Error(), err-1)
}
}
TestErrorsAG: 0/16 cases passed --- PASS: TestErrorsAG (0.00s) === RUN TestErrors --- FAIL: TestErrors (0.00s) panic: runtime error: invalid memory address or nil pointer dereference [recovered] panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x511fb2]
package lab
import (
. "io"
"testing"
)
// String: "io: read/write on closed pipe"
var s = ErrClosedPipe.Error()
var errTests = []struct {
in Errors
want string
}{
{nil, "(0 errors)"},
{[]error{}, "(0 errors)"},
{[]error{ErrClosedPipe}, s},
{[]error{ErrClosedPipe, ErrClosedPipe}, s + " (and 1 other error)"},
{[]error{ErrClosedPipe, ErrClosedPipe, ErrClosedPipe}, s + " (and 2 other errors)"},
{[]error{nil}, "(0 errors)"},
{[]error{ErrClosedPipe, nil}, s},
{[]error{nil, ErrClosedPipe}, s},
{[]error{ErrClosedPipe, ErrClosedPipe, nil}, s + " (and 1 other error)"},
{[]error{ErrClosedPipe, ErrClosedPipe, nil, nil}, s + " (and 1 other error)"},
{[]error{ErrClosedPipe, ErrClosedPipe, nil, nil, nil}, s + " (and 1 other error)"},
{[]error{nil, ErrClosedPipe, nil, ErrClosedPipe}, s + " (and 1 other error)"},
{[]error{nil, nil, ErrClosedPipe, ErrClosedPipe}, s + " (and 1 other error)"},
{[]error{ErrClosedPipe, nil, nil, ErrClosedPipe, ErrClosedPipe}, s + " (and 2 other errors)"},
{[]error{ErrClosedPipe, ErrClosedPipe, nil, ErrClosedPipe, nil}, s + " (and 2 other errors)"},
{[]error{nil, nil, nil, nil, ErrClosedPipe, ErrClosedPipe, ErrClosedPipe}, s + " (and 2 other errors)"},
}
func TestErrors(t *testing.T) {
for i, ft := range errTests {
out := ft.in.Error()
if out != ft.want {
t.Errorf("Errors test %d: got %q for input %v, want %q", i, out, ft.in, ft.want)
}
}
}