-- arrD-hoverdef --
```go
field d int
```

d field

-- arrE-hoverdef --
```go
field e struct{f int}
```

e nested struct

-- arrF-hoverdef --
```go
field f int
```

f field of nested struct

-- complexH-hoverdef --
```go
field h int
```

h field

-- complexI-hoverdef --
```go
field i struct{j int}
```

i nested struct

-- complexJ-hoverdef --
```go
field j int
```

j field of nested struct

-- mapStructKeyX-hoverdef --
```go
field x []string
```

X key field

-- mapStructKeyY-hoverdef --
```go
field y string
```

Y key field

-- mapStructValueX-hoverdef --
```go
field x string
```

X value field

-- nestedMap-hoverdef --
```go
field m map[string]float64
```

nested map

-- nestedNumber-hoverdef --
```go
field number int64
```

nested number

-- nestedString-hoverdef --
```go
field str string
```

nested string

-- openMethod-hoverdef --
```go
func (interface).open() error
```

open method comment

-- returnX-hoverdef --
```go
field x int
```

X coord

-- returnY-hoverdef --
```go
field y int
```

Y coord

-- structA-hoverdef --
```go
field a int
```

a field

-- structB-hoverdef --
```go
field b struct{c int}
```

b nested struct

-- structC-hoverdef --
```go
field c int
```

c field of nested struct

-- testDescription-hoverdef --
```go
field desc string
```

test description

-- testInput-hoverdef --
```go
field in map[string][]struct{key string; value interface{}}
```

test input

-- testInputKey-hoverdef --
```go
field key string
```

test key

-- testInputValue-hoverdef --
```go
field value interface{}
```

test value

-- testResultValue-hoverdef --
```go
field value int
```

expected test value

