【问题标题】:Slicing a pointer to slice切片指向切片的指针
【发布时间】:2015-05-01 09:48:27
【问题描述】:

当我关注关于数组和切片的golang blog post 时,我尝试将 指向切片的指针 传递给修改切片标头中的底层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 语句的魔力在哪里?

【问题讨论】:

    标签: go


    【解决方案1】:

    切片表达式的绑定比解引用强。试试这个:

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

    【讨论】:

    • 谢谢@FUZxxl 我在哪里可以阅读 golang 规范文档?
    • @tarrsalah 这有点棘手。从语法上讲,切片或索引表达式接受PrimaryExpr 并创建PrimaryExpr,而一元* 是一个接受UnaryExpr 并创建UnaryExpr 的运算符。 PrimaryExpr 可以变成 UnaryExpr 但不能反过来解释这些优先规则。它在规范中到处都是,也没有特别指出你的地方。
    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 2021-05-03
    • 2017-08-11
    • 1970-01-01
    • 2017-07-31
    • 2021-09-15
    相关资源
    最近更新 更多