Go:不能在"Struct"上调用指针方法getFirstName



我有一个简单的结构体和接收器。我尝试用结构体设置映射,然后调用接收器。

这样的:

package main
import (
"fmt"
)
type myStruct struct {
FirstName string 
LastName string
}
func (m *myStruct) GetFirstName() string {
return m.FirstName
}
func (m *myStruct) GetLastName() string {
return m.LastName
}

func main() {


testMyStruct := myStruct {
FirstName: "x1",
LastName: "x2",
}
myMapStruct["test2"] = testMyStruct 

fmt.Println(myMapStruct["test2"].GetFirstName())

}

我得到这个错误:

cannot call pointer method getFirstName on myStruct

为什么我可以从map中调用receiver方法?

当你传递一个receiver指针时,你必须使用指向结构体的指针来调用它,请查看下面的代码

package main
import (
"fmt"
)
type myStruct struct {
FirstName string 
LastName string
}
func (m *myStruct) GetFirstName() string {
return m.FirstName
}
func (m *myStruct) GetLastName() string {
return m.LastName
}

func main() {


testMyStruct := &myStruct {
FirstName: "x1",
LastName: "x2",
}
myMapStruct:=make(map[string]*myStruct)
myMapStruct["test2"] = testMyStruct 

fmt.Println(myMapStruct["test2"].GetFirstName())

}

请参阅此处

如果传递receiver作为值 ,可以像下面这样使用
package main
import (
"fmt"
)
type myStruct struct {
FirstName string 
LastName string
}
func (m myStruct) GetFirstName() string {
return m.FirstName
}
func (m myStruct) GetLastName() string {
return m.LastName
}

func main() {


testMyStruct := myStruct {
FirstName: "x1",
LastName: "x2",
}
myMapStruct:=make(map[string]myStruct)
myMapStruct["test2"] = testMyStruct 

fmt.Println(myMapStruct["test2"].GetFirstName())

}

最新更新