英文:
Go: cannot call pointer method getFirstName on "Struct"
问题
我有一个简单的结构体和接收器。我试图用结构体设置映射,然后调用接收器。
像这样:
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())
}
我得到了这个错误:
无法在myStruct上调用指针方法getFirstName
为什么我可以从映射中调用接收器方法?
英文:
I have a simple struct and receiver. I try to set the map with the struct and then call the receiver.
Like that:
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())
}
I'm getting this error:
cannot call pointer method getFirstName on myStruct
Why can I call the receiver method from the map?
答案1
得分: 2
由于您传递了一个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())
}
英文:
As you are passing a receiver
pointer ,you have to use pointer to the struct to call it ,Please look at the below code
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())
}
See working here
or You can use like below if passing receiver
as value
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())
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论