为了账号安全,请及时绑定邮箱和手机立即绑定

修复数组替换中不正确引用的切片

修复数组替换中不正确引用的切片

Go
青春有我 2021-11-08 18:25:50
以下 go 代码无法编译,因为(我相信)在引用指针的方式上存在错误。特别是,错误消息是prog.go:13: cannot use append((*x)[:remove], (*x)[remove + 1:]...) (type []int) as type *[]int in assignment这是导致此错误消息的代码的抽象和简化版本。package mainimport "fmt"func main() {    x := &[]int{11, 22, 33, 44, 55, 66, 77, 88, 99}    for i, addr := range *x {        if addr == 22 {            for len(*x) > 5 {                remove := (i + 1) % len(*x)                x = append((*x)[:remove], (*x)[remove+1:]...)            }            break        }    }    fmt.Println(x)}
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

您在这里没有使用数组,而是使用切片。通常,您不想处理指向切片的指针,因为它会变得笨拙,并且在极少数情况下需要该指针。

要修复您的错误,请取消引用x

*x = append((*x)[:remove], (*x)[remove+1:]...)

但是您可能应该直接使用切片值,这样就不需要取消引用:

x := []int{11, 22, 33, 44, 55, 66, 77, 88, 99}


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信