首页 > 解决方案 > 定义函数接收器还是在参数中传递结构指针?

问题描述

来自 Java 多年,我最近拿起了 Golang,我想知道有些不同的范式如何影响常见的实践。最重要的是:如果我定义了一个结构并且我想要一个在该结构上工作的函数(也称为方法),我是将函数定义为“属于”该结构还是将指针传递给该结构自己的功能体?换句话说:

func (c *Component) initState()

或者

func initState(c *Component)

由于 Golang 中没有真正的对象/类概念,是否有任何一个比另一个有优势(例如 Java 用户的可读性或语义清晰度除外)?我大多会选择第一个替代方案,但我的观点可能会因在面向对象的世界中工作一段时间而产生偏见,这就是我问的原因。

标签: go

解决方案


区别主要是语义上的:是initState行为 Component,还是在上运行 Component的函数?

有一个语法差异,那就是只有方法(带有接收器的函数)才能满足接口。如果这与您的情况无关,请遵循语义区别。


推荐阅读