go-delve/delve · error
%s has no member %s
Error message
%s has no member %s
What it means
memberVariable lookups for fake-address variables (loaded synthetic variables such as map/chan internals) walk preloaded children by name. When no child matches memberName, this error states the parent has no such member. The name was misspelled or the parent does not structurally contain it.
Source
Thrown at pkg/proc/variables.go:1155
}
// structField returns the field named memberName in v.
// This function is meant for internal use, it does not support interfaces, embeds or member methods. For those cases findStructMemberOrMethod should be used instead.
func (v *Variable) structField(memberName string) (*Variable, error) {
if v.Unreadable != nil {
return v.clone(), nil
}
vname := v.Name
if v.Name == "" {
vname = v.DwarfType.String()
}
if v.loaded && (v.Flags&VariableFakeAddress) != 0 {
for i := range v.Children {
if v.Children[i].Name == memberName {
return &v.Children[i], nil
}
}
return nil, fmt.Errorf("%s has no member %s", vname, memberName)
}
closure := false
switch v.Kind {
case reflect.Chan:
v = v.clone()
v.RealType = godwarf.ResolveTypedef(&(v.RealType.(*godwarf.ChanType).TypedefType))
case reflect.Func:
fn := v.bi.PCToFunc(v.Base)
v.loadFunctionPtr(0, LoadConfig{MaxVariableRecurse: -1})
if v.Unreadable != nil {
cst := fn.extra(v.bi).closureStructType
if cst == nil || cst.ByteSize == 0 {
// Not a closure, normal function
if _, ok := v.bi.PackageMap[vname]; ok {
return nil, fmt.Errorf("package %s has no function %s", vname, memberName)
}
return nil, fmt.Errorf("%s has no member %s", vname, memberName)
}View on GitHub (pinned to a23773e6c3)
Solutions
- Print the parent variable alone (eval vname) and inspect its actual member names.
- Correct the member name spelling/casing.
- Check the expected field names against your Go runtime version — internals change; upgrade Delve for current layouts.
- Use the locals/vars commands to discover valid names instead of guessing.
Example fix
// before dlv> eval m.count Command failed: m has no member count // after: inspect then use a real member dlv> eval m // view children dlv> eval m.count._ // or the correct runtime field
Defensive patterns
Strategy: validation
Validate before calling
parent, err := client.EvalVariable(scope, vname, cfg)
if err != nil { return err }
for _, c := range parent.Children {
if c.Name == memberName { return nil } // safe to evaluate vname.memberName
}
return fmt.Errorf("%s has no member %s", vname, memberName) Try / catch
v, err := client.EvalVariable(scope, vname+"."+memberName, cfg)
if err != nil && strings.Contains(err.Error(), "has no member") {
// inspect parent children and pick a valid member name
} Prevention
- Always print the parent variable first to discover real member names
- Remember runtime-internal field names vary across Go versions
- Use tab-completion/locals in the terminal instead of guessing names
When it happens
Trigger: Evaluating expr like 'mapVar.key' or 'chanVar.buffer' where vname's variable was loaded with VariableFakeAddress and none of its children match the requested member name.
Common situations: Typo in a field name; accessing runtime-internal fields whose names changed between Go versions (e.g. hmap bucket fields); assuming a synthetic variable has members it does not.
Related errors
- can not watch %q
- package %s has no function %s
- %s (type %s) is not a struct
- could not decode first frame
- unable to find function context
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/12ad4f6b5502b101.
Report an issue: GitHub.