我只是在尝试不同的东西来学习和理解它是如何工作的结构。目前正在玩切片和自定义类型。
我有下面的代码,工作正常,如预期.
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不是已定义的类型)
(edit:错误位于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
}
看看这个答案:Function declaration syntax: things in parenthesis before function name
看起来应该是可能的--然而这个答案似乎说这是不可能的:Golang monkey patching.
有没有可能重写一下这样我就可以
lbl := &[]imageData{}
lbl.InitImageNew(4)
2条答案
按热度按时间piztneat1#
您只能在 named types(或指向命名类型的指针)上定义方法。
[]Type
是 compound type。您可以通过以下方式将其定义为命名类型:然后在其上定义方法。
这在类型的规范部分中有介绍。
j9per5c42#
这个问题是我搜索的第一个问题,所以我会添加我的问题是什么:我有
type MyType = struct {
(带等号)作为根本原因。删除等号有帮助。