كيفية إضافة طرق جديدة إلى نوع موجود في Go؟ (مثل int أو string)
مرحباً بالجميع! لقد بدأت للتو في تعلم Go بعد Python وC#، وواجهت مشكلة في توسيع وظائف الأنواع المضمنة.
في Python كنت معتاداً على فعل ذلك:
```python
# Python - monkey patching
class MyInt(int):
def is_even(self):
return self % 2 == 0
print(MyInt(4).is_even()) # True
```
في C# هناك extension methods:
```csharp
// C# Extension Method
public static class IntExtensions
{
public static bool IsEven(this int value)
{
return value % 2 == 0;
}
}
```
الآن أحاول فعل الشيء نفسه في Go. أريد إضافة method `IsEven()` إلى type `int` للتحقق مما إذا كان الرقم زوجياً. إليك ما أحاول:
```go
package main
import "fmt"
// أحاول توسيع int
func (i int) IsEven() bool {
return i%2 == 0
}
func main() {
x := 4
fmt.Println(x.IsEven())
}
```
المترجم يعطي خطأ: "cannot define new methods on non-local type int". أفهم أن Go أكثر تشدداً مع الأنواع، لكن كيف إذن؟