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

问题描述 投票:-1回答:1

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

我有下面的代码,它工作得很好,并且符合预期。

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函数作为一个方法工作(我想这是正确的术语)。但我得到的错误是

invalid receiver type *[]imageData ([]imageData is not a defined type)

(编辑:错误是在 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)

go slice
1个回答
2
投票

你只能定义方法上 命名类型 或指向命名类型的指针)。[]Type 是一个 复合型. 你可以通过定义它使它成为一个命名类型。

type TypeSlice []Type

然后在它上面定义方法。

这将在 型的规格部分.

© www.soinside.com 2019 - 2024. All rights reserved.