Golang Go语言中是否推荐将同一组用途的函数用结构体串起来?

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中是否推荐将同一组用途的函数用结构体串起来?

方式 1:

struct TUtils struct {}

func (t TUtils) GetNowBejingTime() {}

func (t TUtils) GetLastDaySecondsTotal() {}

方式 2:

func GetNowBejingTime() {}

func GetLastDaySecondsTotal() {}

另: 方式 1 是否等同于面向对象中的静态方法?


更多关于Golang Go语言中是否推荐将同一组用途的函数用结构体串起来?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

23 回复

没有数据的结构体,要他有何用😂

更多关于Golang Go语言中是否推荐将同一组用途的函数用结构体串起来?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


像烤串的签子一样,组织代码,显得不那么零散?

感觉把这些 func 直接放到一个 package 也能“串”起来

当然不。可以用另一个包。

对啊,为什么不用 package 呢?

我觉得方式一的关键在于有 struct 要组织,然后围绕它需要有一些方法,这样刚好也组织了一组函数,核心在于有一些 field 需要组成 struct 来进行管理。如果不是这个需求,个人觉得更适合的是创建一个独立的 package,然后方式二,有种 util package 的感觉。

方式一纯属脱裤子放屁,纯属。

实际调用的时候:

上面:Tutils.TUtils{}.Get()
下面:TUtils.Get()

赞同 1 楼, 结构体是一种复合数据结构, 重点是"数据结构", 而不是"包", “模块”, “命名空间” 一类的…

你需要的可能是命名空间, 那么 go 中唯一可以使用的就是 package 组织.

一,二我都用。
二适合做 util,缺点是项目大了,包数量太多。
一适合包内部用,不对外。做成单例模式,通过一个全局对象访问,避免大量全局的函数。

var TUtils = struct {
GetNowBejingTime func(){}
} {

GetNowBejingTime: func(){
}
}

这个用法我还是头一次遇到,比较有意思,但是这种应该是需要实例化吧。OOP 的静态方法是我想要的形式

建议直接用包,用了 struct 反而不干净了

例如 OpenFile 这类与文件相关的方法只用于文件,所以用 func (*f File) Open(){}让包更干净,用 OpenFile(f File)会让包变得臃肿

但是你这个例子是希望组合一批有某类关联操作的函数,包里没有混合其他结构,所以直接用包更干净

可以参考 strings 包,字符串相关函数都放这个包里。

已经是 var 了,可直接访问匿名结构体里的成员. 包内太多相关的全局变量时会用,收拢 function options 常用. 如:https://github.com/go-stomp/stomp/blob/master/subscribe_options.go

结构体并不是为了串起函数,而是为了面向对象,面向接口设计。别搞混了主次

嗯,我是想模拟面向对象中静态类的静态方法

写 golang 时,我对 util 避讳程度堪比 import 路径里有 src

别把,你弄个 package 不行么?没有数据的 struct 叫什么 struct 。

确实有这种推荐,在《 go 语言学习笔记》中提到:给同一用途的函数定义函数类型,这样可以让相同签名的函数自动实现某个接口

在Golang(Go语言)中,是否推荐将同一组用途的函数用结构体串起来,这取决于具体的应用场景和设计需求。一般来说,这种做法(即通过结构体方法组织函数)在Go语言中是完全可行且常见的,它有助于代码的模块化和封装。

使用结构体方法的好处之一是增强了代码的可读性和可维护性。通过将相关函数封装在同一个结构体中,可以清晰地表达这些函数之间的关联性,使得代码结构更加清晰,易于理解和维护。

此外,结构体方法还可以利用Go语言的接口(interface)特性,实现多态和依赖注入等设计模式,从而增强代码的灵活性和可扩展性。例如,你可以定义一个接口,然后在不同的结构体中实现该接口,这样可以在运行时动态地选择使用哪个实现。

然而,也需要注意不要过度封装。如果函数之间并没有紧密的联系,或者将它们封装在同一个结构体中反而增加了代码的复杂性,那么就不建议这样做。

总之,在Go语言中,将同一组用途的函数用结构体串起来是一种推荐的做法,但需要根据具体情况来判断是否适用。通过合理地使用结构体和接口,可以编写出更加模块化、可维护和可扩展的代码。

希望这个回答对你有所帮助!如果有其他问题或需要更详细的解释,请随时提问。

回到顶部