В данном случае вам нужно положить в мапу указатели на вашу структуру.
https://play.golang.org/p/Jn18TTSDh5Tpackage main
import "fmt"
type nextWords struct {
words []string
}
func (nw *nextWords) GetFirstItem() string {
return nw.words[0]
}
func main() {
var myMap = make(map[string]*nextWords)
myMap["hello"] = &nextWords{words: []string{"foo", "bar"}}
fmt.Println(myMap["hello"].GetFirstItem())
}
Второй вариант,
объявить метод как вызываемый на значении, а не указателе.
Ваш метод GetFirstItem объявлен как вызываемый на указателе (nw *nextWords), поэтому его можно вызвать только на элементе, от которого го может получить адрес. Из мапы его не получается взять потому что при взятии мы получаем копию этого элемента, а не сам элемент. Инплейс го не может взять в таком случае указатель на структуру, разве что мы сначала вытащим её из мапы в переменную и вызовем метод на ней (
например так)
Когда мы делаем мапу из указателей, мы получаем из неё копию указателя, а не самой структуры и можем вызвать на этом указателе метод.
Но учтите, что при отсутствии элемента в мапе ваша программа свалится в панику, поэтому в методе GetFirstItem стоит сделать проверку на nil.