0Pricing
Go Academy · บทเรียน

gob และการเข้ารหัสไบนารี

เข้ารหัสค่าของ Go

gob และการเข้ารหัสไบนารี เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 และการเข้ารหัสไบนารี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “gob และการเข้ารหัสไบนารี”

เข้ารหัสค่าของ Go คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “gob และการเข้ารหัสไบนารี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทบทวน encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob และการเข้ารหัสไบนารี
← กลับไปที่ Go Academy