登录
首页 >  Golang >  Go问答

在golang中复制指针值*a = *b

来源:Golang技术栈

时间:2023-04-15 06:49:57 400浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《在golang中复制指针值*a = *b》就很适合你!本篇内容主要包括在golang中复制指针值*a = *b,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

type T struct {
    Id int
    Name string
}

func Copy(a *T, b *T) error {
    b.Id=5
    b.Name="gert"
    a = b
    return nil
}

a仍然是空的,我必须这样做

func Copy(a *T, b *T) error {
    b.Id = 5
    b.Name = "gert"
    a.Id = b.Id
    a.Name = b.Name
    return nil
}

现在a是一样的b

为什么以及如何直接复制*b*a

正确答案

你的第一个例子几乎是正确的。你传入两个对象的指针。您将这些指针放入变量 A 和 B。但是 A 和 B 是局部变量,所以当您说a=b您只是在说“忘记 A 中的内容(本地)”。程序的其余部分仍然有指向这两个原始对象的指针。

如果要将B 处的 数据结构复制到 A 处的 数据结构 中,请改为执行以下操作:

*a = *b;

正如 dmikalova 在下面的评论中指出的那样,这只是复制结构——而不是结构指向的任何数据。如果你的结构有一个指针,它指向的数据现在由两个副本共享(因为它只复制了指针)。

从技术上讲,字符串始终是指针,因此它们永远不会被复制为结构的一部分。 但是 因为字符串是不可变的(并且 Go 有垃圾收集),字符串“感觉”就像它们是你的结构的一部分,你不必担心低级的字符串共享,它神奇地节省了你的内存,你不必思考关于它。

理论要掌握,实操不能落!以上关于《在golang中复制指针值*a = *b》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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