gpt4 book ai didi

go - 从 slice 差异gccgo vs gc中删除元素

转载 作者:IT王子 更新时间:2023-10-29 01:42:11 25 4
gpt4 key购买 nike

我发现 GCCGO 有一个非常奇怪的问题,我想知道是否有人可以解释它。

我正在尝试使用建议的 slice 技巧 (https://github.com/golang/go/wiki/SliceTricks) 按索引从 slice 中删除一个元素。

以下代码(https://play.golang.org/p/f039m1h7Z1):

package main

import "fmt"

func main() {
xs := []int{0,1,2,3,4}
i := 2
xs, xs[len(xs)-1] = append(xs[:i], xs[i+1:]...), 0
fmt.Println(xs)
}

适用于 go 编译器(go run),但是当我尝试使用

编译它时
gccgo -g -static-libgcc 

我得到一个

panic: runtime error: index out of range 

在线:

    xs, xs[len(xs)-1] = append(xs[:i], xs[i+1:]...), 0

为什么会这样?

注意:我正在写 xs[len(xs)-1] = 0 因为在我的完整用例中,这实际上是一个指向结构的指针 slice ,所以根据 slice 技巧,我需要使旧 slice 中的最终指针为 null 以防止内存泄漏。

最佳答案

根据语言规范,我相信 gccgo 在这里是正确的。这是 https://golang.org/issue/23188 .

关于go - 从 slice 差异gccgo vs gc中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com