尽管我认为标题中并未正确描述我所遇到的问题,但这是我现在能够描述的唯一方法。
我有一个结构Mini
,该结构在另一个文件中定义。一组Minis应该描述为切片。当我想更改Mini
结构的某些字段时,将其附加到切片上需要自定义函数。
直到现在我得到以下代码:
import (
"fmt"
"reflect"
)
//Minis is a slice of all Minis
type Minis struct {
AllMinis []*Mini
}
//Append adds a new Mini to the Minis slice
func (m *Minis) Append(n *Mini) {
m.AllMinis = append(m.AllMinis, n)
}
此代码完全正常。 但是在我看来,只有一个领域的结构是一种无知的行为。
一般来说,有什么方法可以在结构或更优雅的解决方案上建立方法吗?
谢谢!
答案 0 :(得分:4)
将类型声明为切片:
//Minis is a slice of all Minis
type Minis []*Mini
//Append adds a new Mini to the Minis slice
func (m *Minis) Append(n *Mini) {
*m = append(*m, n)
}
concat
感到恐慌,因为QForename
将nil slice指针作为接收者传递给concat
。通过使用非nil指针进行修复:
func (m *Minis) QForename(q string) *Minis {
var matches Minis
for _, n := range *m {
if n.Forename == q {
matches.concat(n)
}
}
return &matches
}