加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang将一个项目附加到一个片段

发布时间:2020-12-16 18:03:23 所属栏目:大数据 来源:网络整理
导读:为什么保持不变? append()是否生成新的片段? package mainimport ( "fmt")var a = make([]int,7,8)func Test(slice []int) { slice = append(slice,100) fmt.Println(slice)}func main() { for i := 0; i 7; i++ { a[i] = i } Test(a) fmt.Println(a)} 在
为什么保持不变? append()是否生成新的片段?
package main

import (
    "fmt"
)

var a = make([]int,7,8)

func Test(slice []int) {
    slice = append(slice,100)
    fmt.Println(slice)
}

func main() {
    for i := 0; i < 7; i++ {
        a[i] = i
    }

    Test(a)
    fmt.Println(a)
}
在你的例子中,Test函数的slice参数在调用者的范围内接收变量a的副本。

由于slice变量保存一个仅引用底层数组的“slice descriptor”,所以在Test函数中,您可以连续修改slice变量中的slice描述符,但这并不影响调用者及其变量。

在Test函数内部,第一个追加将重新分配片段变量下的后备数组,复制其原始内容,并附加100,这就是您正在观察的内容。退出测试后,切片变量超出范围,切片引用的(新)底层数组也将超出范围。

如果要使测试行为像追加一样,您必须从其返回新的切片 – 就像append一样 – 并且要求Test的呼叫者以与使用append相同的方式使用它:

func Test(slice []int) []int {
    slice = append(slice,100)

    fmt.Println(slice)

    return slice
}

a = Test(a)

请仔细阅读this article,因为它基本上显示了如何在内部执行切片之后手动执行附件。然后阅读this。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读