为了账号安全,请及时绑定邮箱和手机立即绑定

在 go 中设置一个方法以使用一片结构

在 go 中设置一个方法以使用一片结构

Go
婷婷同学_ 2022-06-21 16:40:04
//Creating a structuretype Vertex struct {   X, Y int}//Using Add() to add an element to the slice of structure, vfunc (v []Vertex) Add() {   v = append(v, Vertex{2,3})}func main() {   v:= make([]Vertex, 2, 2) //Creating a slice of Vertex struct type   v.Add()   fmt.Println(v)}go tour 站点返回以下错误:无效的接收器类型 []Vertex([]Vertex 不是已定义的类型)v.Add undefined(类型[]Vertex没有字段或方法Add)有人可以帮我弄清楚我到底哪里出错了
查看完整描述

2 回答

?
largeQ

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)

}


查看完整回答
反对 回复 2022-06-21
?
温温酱

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-


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信