如何将struct数组传递给我的struct函数

时间:2016-05-04 08:43:34

标签: go

所以,我将我的切片重命名为在函数中使用,哪一个连接到数组(如类方法)。

type Points []Point


func (p Points) Isset(ip Point) bool {
     for _, i := range p {
         if i.Hash == ip.Hash {
             return true
         }
     }
     return false
}

但它并不重要,因为另一个函数,其中一个试图通过类型点传递切片,我有一些麻烦......

以下是示例:

func (p Points) Merge(ip Points) {
    fmt.Println(p)
}

在第一个函数中 - 我可以作为数组访问我的p变量。在第二个 - p - 只是空数组。但如果我改变传递变量的类型 - 一切都会好的。

我该怎么做...我需要指定合并功能。这个解决方案看起来很棒,但不起作用。

2 个答案:

答案 0 :(得分:2)

我不确定我理解,这是一个播放示例,显示两个函数按照我的预期正常工作。

https://play.golang.org/p/n5ch-Wqbil

也许你遇到了一个问题,从另一个调用一个函数(比如从Merge调用Isset可能吗?)在这种情况下@Games的答案可能仍然适用。

编辑这个例子展示了我可能想要做的思考https://play.golang.org/p/CNEt-poKdN它似乎工作得很好(虽然有N ^ 2时间表现)

答案 1 :(得分:1)

这是因为您需要说Points是对Points实例的引用。您可以通过以下方式执行此操作:

func (p *Points) Isset(ip Point) bool {
     for _, i := range p {
         if i.Hash == ip.Hash {
             return true
         }
     }
     return false
}

请注意我们如何设置*Points而不是Points。这说明我们想要使用我们调用该方法的Points结构的实例。