切片指针到切片

huangapple go评论76阅读模式
英文:

Slicing a pointer to slice

问题

当我按照这篇关于数组和切片的golang博客文章进行操作时,我尝试将切片的指针传递给一个修改切片头部中len属性的函数:

func PtrSubtractOneFromLength(slicePtr *[]byte) {
    slice := *slicePtr
    *slicePtr = slice[0 : len(slice)-1]
}

当我尝试将其重构为以下形式时:

func PtrSubtractOneFromLength(slicePtr *[]int) {
    *slicePtr = *slicePtr[0 : len(*slicePtr)-1]
}

我遇到了这个错误:

cannot slice slicePtr (type *[]int)

slice := *slicePtr语句中的魔法在哪里?

英文:

When I'm following this golang blog post about arrays and slices, I tried to pass a pointer to a slice to a function that modify the underlying len property in the slice header:

func PtrSubtractOneFromLength(slicePtr *[]byte) {
    slice := *slicePtr
    *slicePtr = slice[0 : len(slice)-1]
}

And when I tried to refactor it to this from:

func PtrSubtractOneFromLength(slicePtr *[]int) {
	*slicePtr = *slicePtr[0 : len(*slicePtr)-1]
}

I get this error

cannot slice slicePtr (type *[]int)

Where is the magic in the slice := *slicePtr statement?

答案1

得分: 7

一个切片表达式的绑定比解引用更强。尝试这样写:

*slicePtr = (*slicePtr)[0 : len(*slicePtr)-1]
英文:

A slice expression binds stronger than a dereference. Try this:

*slicePtr = (*slicePtr)[0 : len(*slicePtr)-1]

huangapple
  • 本文由 发表于 2015年3月1日 03:51:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/28786137.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定