我正在启动新的应用程序。
我知道我们无法修补代码。因此,如果我们想使用基本数据类型(例如int,float,string等)进行破解,那是不可能的。
因此,我正在考虑为这些基本事物创建新类型,并在整个应用程序中使用它们,而不是在基本事物中使用它们。稍后,如果我们要覆盖其中的某些方法或要添加一些新方法,则可以覆盖这些新类型。
这是好方法吗?
以下是示例代码:
type NewInt Int
或
type NewInt struct{
Int
}
如果我要创建一个像var test NewInt = 16
这样的变量,它将在内部通过创建内存问题来创建2个对象(一个用于基本int,另一个用于newint)?还是两者都使用相同的对象?
如何调试这种情况?创建变量后如何收集堆中所有现有的对象?
答案 0 :(得分:6)
我认为您失败的基本路线会给您带来麻烦。
您实际上不应该包装/模拟原始数据类型,例如int
,string
等。而是创建更高级别的抽象;以接口的形式。
您提到需要在新类型上“覆盖一些方法”;但这应该在接口级别而不是数据类型级别进行。
您还会发现,使用其他go软件包要困难得多,因为您将不断地从NewInt
转换为int
并传递到其他软件包中。
如果提供了何时计划使用NewInt
类型数据类型的示例,那么我可以提供一个示例,说明如何使用接口进行操作。