Golang Go语言中是否需要使用 getter / setter?如果需要,什么情况应该使用?

我看大部分情况下是不需要的,但是有时候要给读写的时候加个锁,这时候就貌似必须得有这个了。

如果一个 struct 有了 getter / setter 而其他的没有,就显得很不统一,最后的代码很难看的样子,有时候还记不住哪个有哪个没有了。

这样的问题咋解决?
Golang Go语言中是否需要使用 getter / setter?如果需要,什么情况应该使用?

9 回复


碰到这样的的说明你的上层接口设计不当
所有需要锁的地方都要用统一的 get set

更多关于Golang Go语言中是否需要使用 getter / setter?如果需要,什么情况应该使用?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


多用 interface …

go is not java

让我又想到了递归命名法, go is not java ginj

如果你的实现不可避免的存在竞争条件,那加锁也没什么可耻的。而且加锁也不是非要在 getter/setter 上加,别套用 java 的 synchronized ,完全可以在相关逻辑代码中加,如果逻辑复杂多处竞争,那你就真该考虑优化优化设计了。另外,既然用 go ,那还是尽量多用 channel 少用共享可变量吧。

因为不是所有地方都需要,不统一,所以才纠结。

如果我想在内存中保存一个列表,不断的有各路 goroutine 更新它的某些元素, channel 怎么做?

另开一个 goroutine 专门维护这个列表,其它各路 goroutines 通过 channel 和它通信,这样就没必要加锁了。当然,前提是对这个列表的更新或访问不会频繁到成为瓶颈。实际上,如果成为瓶颈了,即使用锁来同步,也不会好哪去,这时应该考虑对这列表进行分区了。个人愚见,仅供参考。

能用楼上的 Channel 就用,实在用不了再看数量,多的就统一,少的话,业务函数自己上锁。

在Go语言中,是否使用getter和setter(访问器和修改器)主要取决于具体的设计需求和编码风格。Go语言本身并不强制要求使用getter和setter,因为它倡导的是简洁和直接访问字段的风格。然而,在某些情况下,使用getter和setter是非常有益的。

一种常见的情况是当你需要控制对结构体字段的访问时。通过getter和setter,你可以添加额外的逻辑,比如验证输入值、触发事件或者在字段值改变时更新相关字段。这种封装有助于维护代码的健壮性和可维护性。

此外,当你希望在未来可能改变字段的实现方式(例如,从直接存储值改为从数据库或其他数据源动态获取)时,使用getter和setter可以提供更好的灵活性。这样,你可以在不改变外部代码的情况下修改内部实现。

然而,对于简单的数据结构,直接访问字段通常是更简洁和直观的方式。Go语言鼓励开发者在保持代码清晰和可读性的同时,做出最适合当前情况的设计选择。

总的来说,是否使用getter和setter取决于你的具体需求和编程风格。在需要控制访问、添加逻辑或提高灵活性时,使用getter和setter是明智的选择。而在追求简洁和直接访问时,直接字段访问则更为合适。

回到顶部