登录
首页 >  Golang >  Go问答

修改切片指针不会影响原始指针

来源:stackoverflow

时间:2024-03-20 17:03:38 474浏览 收藏

在 Go 语言中,当修改结构体中指向切片的指针时,不会影响原始切片。这是因为指针本身存储的是切片的地址,而不是切片本身。因此,修改结构体中的指针不会改变原始切片的实际内容。要解决此问题,可以使用指针切片,即指向切片指针的指针。通过这种方式,对结构体中指针切片的修改将反映在原始切片中。

问题内容

我尝试创建一个结构,其中一个字段是指向现有空切片的指针。然后我修改结构体的字段,稍后我尝试从原始切片中获取新内容 - 但它仍然是空的!

这里是演示代码:

package main

import (
    "fmt"
)

type a struct {
    b []int
}

func main() {
    c := []int{}

    a := &a{
        b: c,
    }

    a.b = append(a.b, 5)

    fmt.println(c)
    fmt.println(a)
}

这里的结果是:

[]
&{[5]}

问题是 - 如何从原始切片和结构体的字段中获取实际的切片内容?我在这里没有将切片作为参数传递给函数。


解决方案


您可以使用指针切片,如下例所示:

package main

import (
    "fmt"
)

type A struct {
    B *[]int
}

func main() {
    c := []int{}

    a := &A{
        B: &c,
    }

    *a.B = append(*a.B, 4)
    *a.B = append(*a.B, 5)

    fmt.Println(c)

    fmt.Println(a.B)
}

结果

今天关于《修改切片指针不会影响原始指针》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>