将映射传递给导入的Golang包中的函数时出错

时间:2015-01-26 23:22:17

标签: go namespaces

我需要将地图发送到导入包中声明的函数,并不断收到此错误:

  

./ main.go:21:不能使用m(类型map [string] ticket)作为类型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
}

如何将地图的值传递给导入的包函数或获取函数内的map值 来自父包? 这甚至可能还是有解决方法?

1 个答案:

答案 0 :(得分:3)

尽管这两种类型的名称相同且包含相同的结构,但它们的类型不同。类型始终属于包,这两种类型属于不同的包。

因此,您不应该将ticket类型从some_package复制到main,而是通过将其命名为大写来将其导出到其他包:type Ticket struct; 2.从main make(map[string]sp.Ticket)开始使用它。