我只是在尝试不同的东西来学习去了解它的结构如何工作。目前正在玩弄切片和自定义类型。
我有下面的代码,它工作得很好,并且符合预期。
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)
你只能定义方法上 命名类型 或指向命名类型的指针)。[]Type
是一个 复合型. 你可以通过定义它使它成为一个命名类型。
type TypeSlice []Type
然后在它上面定义方法。
这将在 型的规格部分.