我只是在尝试不同的东西来学习去理解它的工作结构。目前正在玩切片和自定义类型。我有以下代码可以正常工作并且符合预期。package imgsliceimport ( "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 arrrayfunc 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)
1 回答

皈依舞
TA贡献1851条经验 获得超3个赞
您只能在命名类型(或指向命名类型的指针)上定义方法。[]Type
是复合型。您可以通过定义它使其成为命名类型:
type TypeSlice []Type
然后在上面定义方法。
这在有关 types 的规范部分中进行了介绍。
添加回答
举报
0/150
提交
取消