Mengimplementasikan Layanan gRPC Unary
Server dan client dengan grpc-go
Mengimplementasikan Layanan gRPC Unary adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa itu RPC unary?
RPC unary adalah pola gRPC paling sederhana: klien mengirim satu permintaan dan menerima satu respons, mirip dengan pemanggilan fungsi biasa melalui jaringan.
Implementasi server
Implementasikan antarmuka yang dihasilkan. Sematkan struktur Unimplemented*Server untuk kompatibilitas ke depan:
type userServer struct {
pb.UnimplementedUserServiceServer
db *sql.DB
}
func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
// query DB
return &pb.User{Id: req.Id, Name: "Alice"}, nil
}Memulai server
Buat server gRPC, daftarkan implementasinya, lalu dengarkan pada port TCP:
lis, _ := net.Listen("tcp", ":50051")
grpcSrv := grpc.NewServer()
pb.RegisterUserServiceServer(grpcSrv, &userServer{})
log.Fatal(grpcSrv.Serve(lis))Koneksi klien
Hubungkan ke server dan buat stub klien:
conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { log.Fatal(err) }
defer conn.Close()
client := pb.NewUserServiceClient(conn)Melakukan pemanggilan unary
Panggil metode RPC pada stub klien seolah-olah metode tersebut adalah fungsi lokal:
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: 42})
if err != nil { log.Fatalf("error: %v", err) }
fmt.Println(user.Name)Penanganan galat
gRPC menggunakan kode status. Kembalikan galat dengan status.Errorf dan periksa galat tersebut dengan status.Code(err):
import "google.golang.org/grpc/status"
import "google.golang.org/grpc/codes"
// Server:
return nil, status.Errorf(codes.NotFound, "user %d not found", req.Id)
// Client:
if status.Code(err) == codes.NotFound { /* handle */ }Penerusan konteks
Konteks yang diteruskan ke pemanggilan RPC klien membawa batas waktu dan pembatalan ke server. Server harus meneruskannya ke pemanggilan lanjutan (DB, RPC lain).
TLS untuk produksi
Ganti kredensial yang tidak aman dengan TLS di lingkungan produksi:
creds, _ := credentials.NewServerTLSFromFile("cert.pem", "key.pem")
grpcSrv := grpc.NewServer(grpc.Creds(creds))UnimplementedServer
Menyematkan pb.UnimplementedXxxServer menyediakan implementasi stub untuk semua metode RPC yang mengembalikan status Unimplemented. Dengan demikian, server tetap dapat dikompilasi ketika RPC baru ditambahkan ke proto sebelum Anda mengimplementasikannya.
grpc.Dial vs grpc.NewClient
grpc.Dial tidak digunakan lagi pada versi yang lebih baru. Gunakan grpc.NewClient, yang tidak membuat koneksi secara langsung, melainkan secara malas saat pemanggilan RPC pertama dilakukan.
Layanan refleksi
Daftarkan layanan refleksi gRPC agar alat seperti grpcurl dapat menginspeksi layanan yang tersedia tanpa file .proto:
reflection.Register(grpcSrv)Pemeriksaan Singkat
Apa tujuan menyematkan pb.UnimplementedXxxServer dalam struktur server gRPC?
Ringkasan: gRPC Unary
Poin-poin penting:
- Implementasikan antarmuka yang dihasilkan; sematkan UnimplementedServer
- grpc.NewServer() + Register + Serve pada pemantau TCP
- Klien: grpc.NewClient + NewXxxClient yang dihasilkan
- Gunakan status.Errorf/status.Code untuk menangani galat gRPC
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengimplementasikan Layanan gRPC Unary” gratis?
Ya — teks lengkap “Mengimplementasikan Layanan gRPC Unary” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengimplementasikan Layanan gRPC Unary”?
Server dan client dengan grpc-go Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mengimplementasikan Layanan gRPC Unary” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Protocol Buffers dan File .proto
- Mengimplementasikan Layanan gRPC Unary
- Streaming Server dan Client
- Interceptor dan Metadata gRPC