接收器类型无效 - 可以与 myType 结构一起使用吗?

我只是在尝试不同的东西来学习去理解它的工作结构。目前正在玩切片和自定义类型。


我有以下代码可以正常工作并且符合预期。


package imgslice


import (

    "fmt"

    "image"

)


type imageData struct {

    position      int         // Image Number

    image         *image.RGBA // Image Store

    height        int         // Height In Pixels

    width         int         // Width In Pixels

}


func init() {

    fmt.Println("Starting")


    lbl := &[]imageData{}

    println(lbl)


    InitImage(lbl, 3)


    fmt.Printf("%#v\n", lbl)



}


// Initalise the imageData arrray

func InitImage(l *[]imageData, images int) {

    var i int

    var newRecord imageData


    for i = 0; i < images; i++ {

        newRecord = imageData{position: i}


        *l = append(*l, newRecord)


    }


    return

}

我正在尝试重新编写 InitImage 函数以作为一种方法工作(我认为这是正确的术语)。但我得到了错误:


无效的接收器类型 *[]imageData([]imageData 不是定义的类型)


(编辑:错误func (l *[]imageData) InitImageNew(images int) {在线)


我想这样做的唯一原因是a)学习看看它是否可以完成和b)在风格上,我认为我更喜欢将切片作为额外的参数。


func (l *[]imageData) InitImageNew(images int) {

    var i int

    var newRecord imageData


    for i = 0; i < images; i++ {

        newRecord = imageData{position: i}


        *l = append(*l, newRecord)


    }


    return

}

看这个答案:函数声明语法:函数名前括号中的东西


似乎应该是可能的-但是这个答案似乎说这是不可能的:Golang monkey patching。


是否可以重写这个所以我可以做


lbl := &[]imageData{}

lbl.InitImageNew(4)


德玛西亚99
浏览 115回答 1
1回答

皈依舞

您只能在命名类型(或指向命名类型的指针)上定义方法。[]Type是复合型。您可以通过定义它使其成为命名类型:type&nbsp;TypeSlice&nbsp;[]Type然后在上面定义方法。这在有关 types 的规范部分中进行了介绍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python