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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทบทวน encoding/json
- encoding/xml
- encoding/csv
- gob และการเข้ารหัสไบนารี