英文:
Error passing map to a function in imported Golang package
问题
我需要将一个地图发送到一个导入包中声明的函数,并且一直收到以下错误:
> ./main.go:21: cannot use m (type map[string]ticket) as type map[string]some_package.ticket in function argument
这是在golang GOPATH文件夹中main.go的代码:
package main
import (
"time"
sp "./some_package"
)
type ticket struct {
Timestamp int64
Identification_number int
}
var m map[string]ticket
func main() {
humans := 10
m = make(map[string]ticket)
m["ticket1"] = ticket{time.Now().Unix(), 1234}
sp_ := sp.New(humans)
sp_.SetTicket(m)
}
这是在golang GOPATH文件夹中/some_package中some_package.go的代码:
package some_package
type park struct{
card map[string]ticket
people int
}
type ticket struct {
Timestamp int64
Identification_number int
}
func (p *park) SetTicket(m map[string]ticket)(){
}
func New(humans int)(p *park){
p.card = make(map[string]ticket)
p.people = humans
return p
}
我应该如何将地图的值传递给导入包函数,或者如何从父包中的函数中获取地图的值?这是可能的吗,还是有解决方法?
英文:
I need to send a map to a function declared in a imported package, and keep getting this error:
> ./main.go:21: cannot use m (type map[string]ticket) as type map[string]some_package.ticket in function argument
This is the code of main.go in golang GOPATH folder:
package main
import (
"time"
sp "./some_package"
)
type ticket struct {
Timestamp int64
Identification_number int
}
var m map[string]ticket
func main() {
humans := 10
m = make(map[string]ticket)
m["ticket1"] = ticket{time.Now().Unix(), 1234}
sp_ := sp.New(humans)
sp_.SetTicket(m)
}
And this is the code of some_package.go in /some_package in golang GOPATH folder:
package some_package
type park struct{
card map[string]ticket
people int
}
type ticket struct {
Timestamp int64
Identification_number int
}
func (p *park) SetTicket(m map[string]ticket)(){
}
func New(humans int)(p *park){
p.card = make(map[string]ticket)
p.people = humans
return p
}
How should I pass the value of the map to the imported package function or get the map value inside the function
from the parent package?
Is this even possible or is there a workaround?
答案1
得分: 3
尽管这两种类型的名称和结构相同,但它们并不是同一种类型。类型总是属于一个包,而这两种类型属于不同的包。
因此,你不应该将some_package
中的ticket
类型复制粘贴到main
中,而是应该采取以下两个步骤:1. 通过将其命名为大写来将其导出到其他包中:type Ticket struct
;2. 在main
中使用它,例如make(map[string]sp.Ticket)
。
英文:
Even though the two types are named the same and contain the same structure, they are not the same type. A type always belongs to a package, and those two types belong to different packages.
So you shouldn't copypaste the type ticket
from some_package
to main
, but instead 1. export it to other packages by naming it in uppercase: type Ticket struct
; and 2. use it from main
like make(map[string]sp.Ticket)
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论