0Pricing
Go Academy · درس

gob والترميز الثنائي

رمّز قيم Go

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

ما هو gob

إن encoding/gob تنسيق ثنائي خاص بـ Go لتسلسل قيم Go. وهو مضغوط وسريع، ومثالي للاتصال بين برامج Go وتخزين البيانات على القرص.

مقارنة gob وJSON

JSON نصي ومقروء للبشر ومتعدد اللغات. أما gob فهو ثنائي ومخصص لـ Go فقط، لكنه أكثر ضغطًا وأسرع في الترميز. استخدموا gob عندما يكون الطرفان برنامجَي Go.

الترميز إلى مخزن مؤقت

يكتب gob.Encoder إلى أي io.Writer. نستخدم هنا bytes.Buffer للاحتفاظ بالإخراج الثنائي.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	enc := gob.NewEncoder(&buf)
	enc.Encode(42)
	fmt.Println("bytes written:", buf.Len())
}

فك الترميز من مخزن مؤقت

يقرأ gob.Decoder من io.Reader ويملأ مؤشرًا، تمامًا مثل Unmarshal.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(42)
	var n int
	gob.NewDecoder(&buf).Decode(&n)
	fmt.Println(n)
}

ترميز البنى

يتعامل gob مع البنى بصورة طبيعية. ولا تُرمَّز إلا الحقول المصدَّرة.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(User{"Ann", 30})
	var u User
	gob.NewDecoder(&buf).Decode(&u)
	fmt.Println(u)
}

ترميز الخرائط والشرائح

تُرمَّز الأنواع المركبة مثل الخرائط والشرائح ويُفك ترميزها بشفافية.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode([]int{1, 2, 3})
	var s []int
	gob.NewDecoder(&buf).Decode(&s)
	fmt.Println(s)
}

التدفقات ذات الوصف الذاتي

تتضمن تدفقات gob معلومات النوع، ولذلك يستطيع المُفكِّك إعادة بناء القيم حتى عند مطابقتها مع بنية مختلفة قليلًا لكنها متوافقة. ويُسمح بالحقول الإضافية أو المفقودة.

الحقول المصدَّرة فقط

مثل JSON، لا يرمّز gob إلا الحقول المصدَّرة. أما الحقول غير المصدَّرة، أي المكتوبة بأحرف صغيرة، فيتخطاها بصمت.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
)

type T struct {
	Public  int
	private int
}

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(T{Public: 1, private: 2})
	var out T
	gob.NewDecoder(&buf).Decode(&out)
	fmt.Println(out.Public, out.private)
}

خيارات ثنائية أخرى

بالنسبة إلى البيانات الثنائية الخام ثابتة الحجم، تكتب encoding/binary الأعداد الصحيحة والعشرية بترتيب البايتات الكبير أو الصغير. وهي أقل مستوى من gob ولا تصف نفسها.

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	binary.Write(&buf, binary.BigEndian, uint32(258))
	fmt.Println(buf.Bytes())
}

متى نستخدم كل خيار

اختاروا:

  • json - واجهات API والإعدادات والتوافق بين اللغات
  • gob - التواصل بين برامج Go، والحجم المضغوط، وسهولة التعامل مع البنى
  • binary - تخطيطات البايتات الدقيقة والبروتوكولات

غير مقروء للبشر

إخراج gob ثنائي؛ لذا تؤدي طباعته إلى ظهور رموز غير مفهومة. هذه هي المقايضة مقابل صغر الحجم. استخدموه للآلات، وليس للسجلات التي تقرؤونها.

تحقق سريع

متى يكون gob خيارًا أفضل من JSON؟

مراجعة

ترميز gob والثنائي:

  • gob.NewEncoder/NewDecoder للبيانات الثنائية بين برامج Go
  • مضغوط وذو وصف ذاتي، ولا يتعامل إلا مع الحقول المصدَّرة
  • encoding/binary لتخطيطات البايتات الدقيقة
  • يبقى JSON الخيار الأفضل للتوافق بين اللغات وسهولة القراءة

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

هل درس «gob والترميز الثنائي» مجاني؟

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

ماذا ستتعلم في «gob والترميز الثنائي»؟

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

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

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

كم من الوقت يستغرق درس «gob والترميز الثنائي»؟

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

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

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

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

  1. مراجعة encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob والترميز الثنائي
← العودة إلى Go Academy