登录
首页 >  Golang >  Go问答

结构体是否包含指针类型的字段?

来源:stackoverflow

时间:2024-03-23 12:12:31 345浏览 收藏

在 Go 语言中,结构体是否包含指针类型的字段是一个值得考虑的问题。通常,使用指针接收器可以修改结构体中的值,而使用带有指针的结构体字段可以访问和更新指针指向的值。然而,这两种方法都会导致相同的结果。 决定是否在结构体字段中使用指针有几个原因,例如防止默认值。但需要澄清的是,Go 语言中并没有强制所有接收器都必须是指针接收器的模式。相反,根据情况选择指针接收器或值接收器,并考虑是否需要修改结构体中的值。

问题内容

如果我需要访问结构上的 int,那么我可以使用指针接收器,但我也可以使用带有指针的接收器添加到结构字段,即

type Something struct {
    counter  *int
    counter1 int
}

所以上面的计数器实际上是一个指针,这样我就可以访问它并从接收器更新它。

当然,另一种方法是将其保留为非指针并使用指针接收器。

据我所知,将指针放入结构体字段的原因是为了确保您不会获得默认值 - 如果是 int,则 int 会获得 0 作为默认值,但也许您会获得默认值想要表明它丢失了。

但是添加一个指向结构体的指针,这样您就不需要使用指针接收器,这会导致问题,还是建议这样做?

考虑到 go 中的模式是,如果 1 个接收者是指针接收者,那么所有接收者都应该是指针接收者

提前致谢

我已经证明,指针接收器和带有接收器的结构上的指针都会给出相同的结果。


正确答案


这个问题有几个问题:

通常,如果要更改结构中的值,则必须使用指针接收器。如果结构体有指针值,您可以修改它们指向的值,但您仍然无法修改它指向的位置,这是正确的。

放置指针的原因因情况而异,防止默认值只是其中之一。

下列说法错误的是:

“考虑到 Go 中的模式是,如果 1 个接收器是指针接收器,则所有接收器都应该是指针接收器”

使用指针接收器定义的方法仅为该类型的可寻址实例定义。使用值接收器定义的方法是为类型的指针和值实例定义的。您可以使用指针和值接收器定义方法。

通常,如果方法修改结构体的值,则该方法必须使用指针接收器。

所以,简而言之,如何在结构中使用指针字段取决于具体情况。您无需遵循任何一般规则或模式。

终于介绍完啦!小伙伴们,这篇关于《结构体是否包含指针类型的字段?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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