2 回答
TA贡献2039条经验 获得超7个赞
定义方法时,接收者必须是命名类型,或指向命名类型的指针。
所以func (v []Vertex) Add() { ... } 无效,因为[]Vertex不是命名类型或指向命名类型的指针。
如果您希望在切片顶点上使用方法,则需要一种新类型。例如:
type Vertices []Vertex
func (v *Vertices) Add() {
*v = append(*v, Vertex{2, 3})
}
整个程序将是这样的:
package main
import "fmt"
type Vertex struct {
X, Y int
}
type Vertices []Vertex
func (v *Vertices) Add() {
*v = append(*v, Vertex{2, 3})
}
func main() {
v := make([]Vertex, 2, 2) //Creating a slice of Vertex struct type
(*Vertices)(&v).Add()
fmt.Println(v)
}
TA贡献1752条经验 获得超4个赞
//Creating a structure
type Vertex struct {
X, Y int
}
type Verices struct{
Vertices []Vertex
}
func (v *Verices) Add() {
v.Vertices = append(v.Vertices, Vertex{2,3})
}
func main() {
v:= Verices{}
v.Add()
fmt.Println(v)
}
您不能调用Add切片,也不能在其上定义方法,但是您可以将切片包装在结构中并在其上定义方法。
见行动:
https://play.golang.org/p/NHPYAdGrGtp
https://play.golang.org/p/nvEQVOQeg7-
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报