Protocol Buffers และไฟล์ .proto
ชนิดข้อความ บริการ และการสร้างโค้ดด้วย protoc
Protocol Buffers และไฟล์ .proto เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
Protocol Buffers คืออะไร
Protocol Buffers (protobuf) เป็นรูปแบบการทำให้ข้อมูลเป็นอนุกรมแบบไบนารีที่ไม่ขึ้นกับภาษา พัฒนาโดย Google มีขนาดเล็กและทำงานเร็วกว่า JSON และเป็นรูปแบบข้อมูลบนสายส่งมาตรฐานสำหรับ gRPC
ไวยากรณ์ไฟล์ .proto
กำหนดข้อความและบริการในไฟล์ .proto:
syntax = "proto3";
package user;
option go_package = "github.com/example/user/pb";
message User {
int64 id = 1;
string name = 2;
string email = 3;
}
service UserService {
rpc GetUser (GetUserRequest) returns (User);
}
message GetUserRequest { int64 id = 1; }หมายเลขฟิลด์
แต่ละฟิลด์มีหมายเลขเฉพาะ (แท็ก) ที่ใช้ในการเข้ารหัสแบบไบนารี ห้ามเปลี่ยนหมายเลขฟิลด์ที่มีอยู่หลังจากเริ่มใช้งานสคีมาแล้ว เพราะจะทำลายความเข้ากันได้
ค่าเริ่มต้นของ proto3
ใน proto3 ฟิลด์ทั้งหมดมีค่าเริ่มต้น (0 สำหรับตัวเลข, "" สำหรับสตริง และ false สำหรับค่าบูล) ไม่มีความแตกต่างระหว่าง required กับ optional — ฟิลด์ที่หายไปจะใช้ค่าเริ่มต้น
การติดตั้ง protoc
ติดตั้งคอมไพเลอร์ protobuf และปลั๊กอิน Go:
brew install protobuf
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latestการสร้างโค้ด Go
เรียกใช้ protoc เพื่อสร้างโครงสร้าง Go และโครงร่าง gRPC:
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
user/user.protoชนิดที่สร้างขึ้น
protoc จะสร้างโครงสร้าง Go หนึ่งรายการต่อข้อความ เมธอด getter อินเทอร์เฟซบริการ โครงสร้างเซิร์ฟเวอร์ที่ยังไม่ได้ใช้งาน และโครงสร้างไคลเอนต์ที่มีเมธอด RPC ทั้งหมด
ฟิลด์แบบซ้ำ
ใช้ repeated เพื่อแทนรายการ ซึ่งจะแปลงเป็นสไลซ์ของ Go:
message ListUsersResponse {
repeated User users = 1;
}ชนิดแจงนับ
กำหนดชนิดแจงนับใน proto3 ค่าแรกต้องเป็น 0 ซึ่งเป็นค่าเริ่มต้น:
enum Role {
ROLE_UNSPECIFIED = 0;
ROLE_USER = 1;
ROLE_ADMIN = 2;
}ชนิดที่รู้จักกันดี
แพ็กเกจ google/protobuf มีชนิดทั่วไป ได้แก่ Timestamp, Duration, Struct (คล้าย JSON) และ Any ให้นำเข้าชนิดเหล่านี้ในไฟล์ .proto
import "google/protobuf/timestamp.proto";
message Event { google.protobuf.Timestamp created_at = 1; }กฎความเข้ากันได้ย้อนหลัง
การเปลี่ยนแปลงที่ปลอดภัย: เพิ่มฟิลด์ใหม่ เพิ่มชนิดข้อความใหม่ และเพิ่มค่าแจงนับใหม่ การเปลี่ยนแปลงที่ไม่ปลอดภัย: เปลี่ยนหมายเลขฟิลด์ เปลี่ยนชนิดฟิลด์ และลบฟิลด์ (ฟิลด์เหล่านั้นจะกลายเป็นค่าเริ่มต้นโดยไม่มีการแจ้งเตือน)
ตรวจสอบความเข้าใจอย่างรวดเร็ว
หมายเลขฟิลด์ในข้อความ protobuf ต้องมีคุณสมบัติอย่างไร
สรุป: Protocol Buffers
ประเด็นสำคัญ:
- .proto กำหนดข้อความ (ฟิลด์และชนิดข้อมูล) และบริการ (RPC)
- หมายเลขฟิลด์เป็นค่าถาวร — ห้ามนำกลับมาใช้ซ้ำหรือเปลี่ยนแปลง
- ปลั๊กอิน protoc + go จะสร้างโครงสร้าง Go และโครงร่าง gRPC
- ฟิลด์แบบซ้ำ → สไลซ์; ค่าแจกแจงต้องเริ่มต้นที่ 0
คำถามที่พบบ่อย
บทเรียน “Protocol Buffers และไฟล์ .proto” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Protocol Buffers และไฟล์ .proto” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Protocol Buffers และไฟล์ .proto”
ชนิดข้อความ บริการ และการสร้างโค้ดด้วย protoc คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “Protocol Buffers และไฟล์ .proto” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Protocol Buffers และไฟล์ .proto
- การใช้งานบริการ gRPC แบบเอกภาคี
- การสตรีมฝั่งเซิร์ฟเวอร์และไคลเอนต์
- อินเตอร์เซปเตอร์และข้อมูลเมทาดาทาของ gRPC