让我们说在Java中,我有类 CryptoFormat ,它有一个名为 getLegacyFormat()的静态方法。当我想使用该方法时,我只需要调用 CryptoFormat.getLegacyFormat()。这很清楚,因为我知道方法的来源。
在Go中,没有静态方法。我真的不想创建一个名为 crypto_format.go 的文件,并在那里定义方法。原因是每当我需要这个方法时,我只需要调用 GetLegacyFormat(),它不包含方法来源的上下文。
我可以想出两种解决问题的方法:
我不确定哪一个更好,或者是否有更好的方法。
答案 0 :(得分:3)
我想说你提到的选项1是定义这些函数的更惯用的方法,如果他们不需要任何可以将它们绑定到底层结构的状态。
如果有某种状态,您希望将该功能作为上下文,那么选项2将是您的选择。
请注意,在Go中,函数是"一等公民",因此您没有Java需要为静态方法定义类的约束。
是的,如果你想要一个单独的命名空间,你需要定义单独的包(就像在Java中一样,你需要定义单独的类和/或包)。
如果您希望您的实现是惯用的,我建议您查看Go的标准库(选择一些软件包并探索它们如何实现其功能)以更好地了解通常的方法来构建这个。
答案 1 :(得分:2)
每当我需要这个方法时,我只调用GetLegacyFormat(),它不包含方法来源的上下文。
因此,请在函数名称中添加上下文。
GetLegacyCryptoFormat()