القيم الافتراضية والتحقّق
حدّد قيمًا افتراضية معقولة
القيم الافتراضية والتحقّق درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ضبط قيم افتراضية معقولة
يبدأ الباني المتين بقيم افتراضية جيدة، ثم يتيح للخيارات تجاوزها. يؤدي ذلك إلى تجنّب فخ القيمة الصفرية تمامًا.
التهيئة قبل التطبيق
أنشئ الإعدادات باستخدام القيم الافتراضية أولًا، ثم طبّق الخيارات فوقها.
package main
import "fmt"
type Server struct {
Port int
Timeout int
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer())
fmt.Printf("%+v\n", *NewServer(WithPort(9000)))
}تظل القيم الافتراضية سارية حتى تجاوزها
يؤدي الاستدعاء من دون خيارات إلى استخدام القيم الافتراضية؛ ويستبدل الخيار الحقل الذي يلمسه فقط. وهذا يجمع بين أفضل ميزتين.
التحقق بعد التطبيق
بعد تطبيق الخيارات، تحقّق من الإعدادات النهائية وأعد خطأً إذا كانت غير صالحة. اجعل الباني يعيد (*T, error).
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts { o(s) }
if s.Port < 1 || s.Port > 65535 {
return nil, errors.New("invalid port")
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(99999))
fmt.Println(err)
}التحقق داخل الخيارات
بدلًا من ذلك، يمكن للخيارات نفسها أن تعيد خطأً. ويصبح نوع Option هو func(*Config) error.
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server) error
func WithPort(p int) Option {
return func(s *Server) error {
if p < 1 {
return errors.New("port must be positive")
}
s.Port = p
return nil
}
}
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts {
if err := o(s); err != nil {
return nil, err
}
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(-1))
fmt.Println(err)
}أي أسلوب للتحقق نختار
أجرِ التحقق داخل الخيارات لفحص كل إعداد على حدة، وبعد التطبيق للتحقق من القواعد التي تربط بين الحقول، مثل حاجة TLS إلى مسار شهادة. وغالبًا ما تستخدم الأسلوبين معًا.
توثيق القيم الافتراضية
وثّق دائمًا كل قيمة افتراضية في تعليق توثيق الباني، حتى يعرف المستخدمون ما سيحصلون عليه عند حذف خيار.
المطلوب مقابل الاختياري
أبقِ القيم المطلوبة فعلًا معاملاتٍ موضعية، واحجز الخيارات للقيم الاختيارية حقًا. لا تُخفِ البيانات المطلوبة خلف خيار.
package main
import "fmt"
type Client struct {
BaseURL string
Retries int
}
type Option func(*Client)
func WithRetries(n int) Option { return func(c *Client) { c.Retries = n } }
func NewClient(baseURL string, opts ...Option) *Client {
c := &Client{BaseURL: baseURL, Retries: 3}
for _, o := range opts { o(c) }
return c
}
func main() {
fmt.Printf("%+v\n", *NewClient("https://api"))
}دمج الخيارات
يمكنك تركيب عدة خيارات في إعداد مسبق واحد للتكوينات الشائعة.
package main
import "fmt"
type Server struct{ Port, Timeout int }
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 Production() Option {
return func(s *Server) {
WithPort(443)(s)
WithTimeout(60)(s)
}
}
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer(Production()))
}أفضل الممارسات
- ابدأ بالقيم الافتراضية، ثم طبّق الخيارات
- أجرِ التحقق بعد التطبيق للقواعد التي تربط بين الحقول
- أبقِ القيم المطلوبة معاملاتٍ موضعية
- وثّق كل قيمة افتراضية
واجهة برمجة تطبيقات متكاملة ومتينة
يمنحك الجمع بين القيم الافتراضية والخيارات والتحقق بانيًا مرنًا وآمنًا يوضّح نفسه ويسهل توسيعه.
اختبار سريع
اختبر معرفتك بالقيم الافتراضية والتحقق.
مراجعة
لقد أكملت نمط الخيارات الوظيفية.
- اضبط القيم الافتراضية قبل تطبيق الخيارات
- تحقّق بعد التطبيق، أو داخل الخيارات لإجراء فحوص على مستوى الحقول
- أبقِ القيم المطلوبة معاملاتٍ موضعية
- ركّب الخيارات في إعدادات مسبقة ووثّق القيم الافتراضية
الأسئلة الشائعة
هل درس «القيم الافتراضية والتحقّق» مجاني؟
نعم — نص درس «القيم الافتراضية والتحقّق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «القيم الافتراضية والتحقّق»؟
حدّد قيمًا افتراضية معقولة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «القيم الافتراضية والتحقّق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مشكلة كثرة المعاملات
- دوال الخيارات
- إنشاء واجهة برمجية مرنة
- القيم الافتراضية والتحقّق