猿问

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

以下 go 代码无法编译,因为(我相信)在引用指针的方式上存在错误。


特别是,错误消息是


prog.go:13: cannot use append((*x)[:remove], (*x)[remove + 1:]...) (type []int) as type *[]int in assignment

这是导致此错误消息的代码的抽象和简化版本。


package main


import "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)

}


青春有我
浏览 156回答 1
1回答

Cats萌萌

您在这里没有使用数组,而是使用切片。通常,您不想处理指向切片的指针,因为它会变得笨拙,并且在极少数情况下需要该指针。要修复您的错误,请取消引用x:*x = append((*x)[:remove], (*x)[remove+1:]...)但是您可能应该直接使用切片值,这样就不需要取消引用:x := []int{11, 22, 33, 44, 55, 66, 77, 88, 99}
随时随地看视频慕课网APP

相关分类

Go
我要回答