كيفية تمرير قيمة افتراضية إلى دالة Go إذا كانت اللغة لا تدعم التحميل الزائد للدوال؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم Go بعد Python وواجهت مشكلة غير متوقعة. في Python، اعتدت كتابة دوال مع وسائط افتراضية، على سبيل المثال:
```python
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
```
إذا استدعيت `greet("Alice")`، فإن greeting ستصبح تلقائيًا "Hello". إذا لزم الأمر، يمكنك تمرير القيمة الخاصة بك: `greet("Alice", "Hi")`.
الآن أكتب بلغة Go وأريد إنشاء طريقة مشابهة. لنفترض أن لدي هيكل `Config` وطريقة `NewClient` التي تأخذ عنوان الخادم و timeout. أريد أن يكون timeout الافتراضي 30 ثانية، ولكن في بعض الأحيان يمكن للمستخدم تعيين قيمته الخاصة. في Go، حاولت الكتابة بهذه الطريقة:
```go
type Config struct {
Address string
Timeout int
}
func NewClient(address string, timeout int) *Config {
if timeout == 0 {
timeout = 30 // القيمة الافتراضية
}
return &Config{Address: address, Timeout: timeout}
}
```
لكن هذا لا يعمل بشكل جيد: إذا قام المستخدم بتمرير