英文:
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]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论