在go中装饰基本数据类型

时间:2018-07-02 08:28:39

标签: go

我正在启动新的应用程序。

我知道我们无法修补代码。因此,如果我们想使用基本数据类型(例如int,float,string等)进行破解,那是不可能的。

因此,我正在考虑为这些基本事物创建新类型,并在整个应用程序中使用它们,而不是在基本事物中使用它们。稍后,如果我们要覆盖其中的某些方法或要添加一些新方法,则可以覆盖这些新类型。

这是好方法吗?

以下是示例代码:

type NewInt Int

type NewInt struct{
    Int
}

如果我要创建一个像var test NewInt = 16这样的变量,它将在内部通过创建内存问题来创建2个对象(一个用于基本int,另一个用于newint)?还是两者都使用相同的对象?

如何调试这种情况?创建变量后如何收集堆中所有现有的对象?

1 个答案:

答案 0 :(得分:6)

我认为您失败的基本路线会给您带来麻烦。

您实际上不应该包装/模拟原始数据类型,例如intstring等。而是创建更高级别的抽象;以接口的形式。

您提到需要在新类型上“覆盖一些方法”;但这应该在接口级别而不是数据类型级别进行。

您还会发现,使用其他go软件包要困难得多,因为您将不断地从NewInt转换为int并传递到其他软件包中。

>

如果提供了何时计划使用NewInt类型数据类型的示例,那么我可以提供一个示例,说明如何使用接口进行操作。