Avatar ·

如何在Go中为现有类型添加新方法?(例如,int或string)

大家好!我刚从Python和C#开始学习Go,遇到了扩展内置类型功能的问题。\n\n在Python中,我习惯这样做:\n\n```python\n# Python - monkey patching\nclass MyInt(int):\n def is_even(self):\n return self % 2 == 0\n\nprint(MyInt(4).is_even()) # True\n```\n\n在C#中有扩展方法:\n\n```csharp\n// C# Extension Method\npublic static class IntExtensions \n{\n public static bool IsEven(this int value) \n {\n return value % 2 == 0;\n }\n}\n```\n\n现在我尝试在Go中做同样的事情。我想给`int`类型添加一个`IsEven()`方法,以检查数字的奇偶性。以下是我的尝试:\n\n```go\npackage main\n\nimport "fmt"\n\n// 尝试扩展int\nfunc (i int) IsEven() bool {\n return i%2 == 0\n}\n\nfunc main() {\n x := 4\n fmt.Println(x.IsEven())\n}\n```\n\n编译器报错:"cannot define new methods on non-local type int"。我理解Go对类型更严格,但那么该如何做呢?