0Pricing
Go Academy · درس

إنشاء واجهة برمجية مرنة

طبّق هذا النمط

إنشاء واجهة برمجية مرنة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

تطبيق النمط

اجمع الآن النمط كاملًا: باني يأخذ المعاملات المطلوبة بالإضافة إلى قائمة متغيرة الطول من الخيارات.

الباني متغير الطول

تأتي المعاملات المطلوبة أولًا، ثم الخيارات بصيغة ...Option.

package main

import "fmt"

type Server struct {
	Host string
	Port int
}
type Option func(*Server)

func WithPort(p int) Option { return func(s *Server) { s.Port = p } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, opt := range opts {
		opt(s)
	}
	return s
}

func main() {
	s := NewServer("localhost", WithPort(8080))
	fmt.Printf("%+v\n", *s)
}

الاستدعاء من دون خيارات

بما أن الخيارات متغيرة الطول، يمكن للمستدعين حذفها بالكامل والاعتماد على ما يضبطه الباني.

package main

import "fmt"

type Server struct{ Host string; Port int }
type Option func(*Server)

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	s := NewServer("localhost")
	fmt.Printf("%+v\n", *s)
}

الاستدعاء باستخدام عدة خيارات

كدّس العدد الذي تريده من الخيارات؛ إذ يُقرأ كل خيار بوضوح في موضع الاستدعاء.

package main

import "fmt"

type Server struct {
	Host    string
	Port    int
	Timeout int
	TLS     bool
}
type Option func(*Server)

func WithPort(p int) Option    { return func(s *Server) { s.Port = p } }
func WithTimeout(t int) Option { return func(s *Server) { s.Timeout = t } }
func WithTLS() Option          { return func(s *Server) { s.TLS = true } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	s := NewServer("localhost", WithPort(9000), WithTimeout(60), WithTLS())
	fmt.Printf("%+v\n", *s)
}

استدعاءات توضّح نفسها

قارن بين NewServer("localhost", WithPort(9000), WithTLS()) واستدعاء موضعي. تكون الغاية واضحة من دون الرجوع إلى التوقيع.

إضافة خيارات لاحقًا

هل تحتاج إلى إعداد جديد؟ أضف دالة WithX. سيظل كل موضع استدعاء موجود يُصرَّف من دون أي تعديل — وهذا هو التوافق الحقيقي مع الإصدارات السابقة.

package main

import "fmt"

type Server struct{ Host string; Retries int }
type Option func(*Server)

func WithRetries(n int) Option { return func(s *Server) { s.Retries = n } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	fmt.Printf("%+v\n", *NewServer("h", WithRetries(5)))
}

تمرير الخيارات

بما أن الخيارات قيم، يمكنك إنشاء شريحة في مكان آخر وتمريرها إلى الباني.

package main

import "fmt"

type Server struct{ Host string; Port int }
type Option func(*Server)

func WithPort(p int) Option { return func(s *Server) { s.Port = p } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	common := []Option{WithPort(443)}
	s := NewServer("api", common...)
	fmt.Printf("%+v\n", *s)
}

الخيارات كواجهة برمجة عامة

صدّر نوع Option ودوال WithX حتى يتمكن مستخدمو المكتبة من إعداد نوعك من دون الوصول إلى تفاصيله الداخلية.

الحفاظ على خصوصية الحقول

يمكن أن تظل حقول الإعدادات غير مُصدَّرة؛ فالخيارات هي الطريقة المصرّح بها الوحيدة لضبطها، مما يحمي الثوابت.

متى يتألق النمط

  • بُناة المكتبات ذات الإعدادات الاختيارية الكثيرة
  • واجهات برمجة التطبيقات التي يجب أن تظل مستقرة أثناء توسعها
  • العملاء والخوادم والمسجّلات والبُناة

أمثلة من المكتبة القياسية

سترى هذا الأسلوب في جميع أنحاء منظومة Go، مثل gRPC والعديد من برامج التشغيل. ويساعدك التعرّف إليه على التعامل مع واجهات برمجة التطبيقات هذه بسهولة.

اختبار سريع

اختبر معرفتك بواجهات برمجة التطبيقات المرنة.

مراجعة

لقد أنشأت واجهة برمجة تطبيقات مرنة باستخدام الخيارات الوظيفية.

  • المعاملات المطلوبة أولًا، ثم ...Option
  • التكرار على الخيارات وتطبيق كل منها
  • يمكن للمستدعين تمرير صفر أو عدة خيارات بوضوح
  • إضافة خيارات لاحقًا من دون كسر المستدعين

الأسئلة الشائعة

هل درس «إنشاء واجهة برمجية مرنة» مجاني؟

نعم — نص درس «إنشاء واجهة برمجية مرنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء واجهة برمجية مرنة»؟

طبّق هذا النمط تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «إنشاء واجهة برمجية مرنة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مشكلة كثرة المعاملات
  2. دوال الخيارات
  3. إنشاء واجهة برمجية مرنة
  4. القيم الافتراضية والتحقّق
← العودة إلى Go Academy