GoDasturchi
Command Protocol

Command Protocol

Buyruqlar protokoli

Redis'ga ulanib, SET user:1 Aziz yoki GET user:1 kabi ODDIY, matnli buyruqlar yuborganingizni ko'rgan bo'lsangiz kerak. Bu — command protocol (buyruqlar protokoli): mijoz va server o'rtasidagi "til kelishuvi", oddiy matn qatorlarini strukturaviy buyruqlarga aylantiradi.

example.go
package main

import (
	"fmt"
	"strings"
)

type Command struct {
	Op    string
	Key   string
	Value string
}

// parseCommand — "SET key value" yoki "GET key" kabi matnni Command'ga aylantiradi
func parseCommand(line string) (Command, error) {
	parts := strings.Fields(line)
	if len(parts) == 0 {
		return Command{}, fmt.Errorf("bo'sh buyruq")
	}

	op := strings.ToUpper(parts[0])
	switch op {
	case "GET":
		if len(parts) != 2 {
			return Command{}, fmt.Errorf("GET uchun kalit kerak")
		}
		return Command{Op: "GET", Key: parts[1]}, nil
	case "SET":
		if len(parts) != 3 {
			return Command{}, fmt.Errorf("SET uchun kalit va qiymat kerak")
		}
		return Command{Op: "SET", Key: parts[1], Value: parts[2]}, nil
	default:
		return Command{}, fmt.Errorf("noma'lum buyruq: %s", op)
	}
}

func main() {
	cmd, err := parseCommand("SET user:1 Aziz")
	fmt.Println(cmd, err)
}

strings.Fields(line) — "String Manipulation" darsida ko'rgan funksiya, matnni BO'SH JOY orqali bo'laklarga ajratadi (bir nechta ketma-ket bo'sh joy bo'lsa ham to'g'ri ishlaydi). switch op — buyruq turiga qarab TURLI tekshiruv va ma'lumot tuzilmasi yaratadi ("Switch Statement" darsini eslang), noto'g'ri formatdagi buyruqlar uchun ANIQ xato xabarlarini qaytaradi.

Bu — HTTP JSON API'ga MUQOBIL, YENGILROQ protokol: har bir buyruq bitta matn QATORI, va bu qatorlar tarmoq orqali (yoki bizning misolimizda — to'g'ridan-to'g'ri funksiya chaqiruvi orqali) yuborilishi mumkin. Redis'ning o'zi HAM shunga o'xshash (RESP deb ataluvchi) oddiy, matnga yaqin protokoldan foydalanadi.

>_ Exercise

Protokolga DEL (o'chirish) buyrug'ini qo'shing.

  • switch ichiga "DEL" case qo'shing: len(parts) != 2 bo'lsa xato, aks holda Command{Op: "DEL", Key: parts[1]} qaytaring
  • "DEL user:1" qatorini parseCommand orqali tahlil qiling
  • natijadagi cmd.Op va cmd.Key qiymatlarini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Command protocol — oddiy matn qatorlarini strukturaviy buyruqlarga aylantirib, cache bilan HTTP/JSON'dan yengilroq, tezroq usulda muloqot qilish imkonini beradi.

NEXT UP

Client Library

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Command Protocol

Buyruqlar protokoli

Redis'ga ulanib, SET user:1 Aziz yoki GET user:1 kabi ODDIY, matnli buyruqlar yuborganingizni ko'rgan bo'lsangiz kerak. Bu — command protocol (buyruqlar protokoli): mijoz va server o'rtasidagi "til kelishuvi", oddiy matn qatorlarini strukturaviy buyruqlarga aylantiradi.

example.go
package main

import (
	"fmt"
	"strings"
)

type Command struct {
	Op    string
	Key   string
	Value string
}

// parseCommand — "SET key value" yoki "GET key" kabi matnni Command'ga aylantiradi
func parseCommand(line string) (Command, error) {
	parts := strings.Fields(line)
	if len(parts) == 0 {
		return Command{}, fmt.Errorf("bo'sh buyruq")
	}

	op := strings.ToUpper(parts[0])
	switch op {
	case "GET":
		if len(parts) != 2 {
			return Command{}, fmt.Errorf("GET uchun kalit kerak")
		}
		return Command{Op: "GET", Key: parts[1]}, nil
	case "SET":
		if len(parts) != 3 {
			return Command{}, fmt.Errorf("SET uchun kalit va qiymat kerak")
		}
		return Command{Op: "SET", Key: parts[1], Value: parts[2]}, nil
	default:
		return Command{}, fmt.Errorf("noma'lum buyruq: %s", op)
	}
}

func main() {
	cmd, err := parseCommand("SET user:1 Aziz")
	fmt.Println(cmd, err)
}

strings.Fields(line) — "String Manipulation" darsida ko'rgan funksiya, matnni BO'SH JOY orqali bo'laklarga ajratadi (bir nechta ketma-ket bo'sh joy bo'lsa ham to'g'ri ishlaydi). switch op — buyruq turiga qarab TURLI tekshiruv va ma'lumot tuzilmasi yaratadi ("Switch Statement" darsini eslang), noto'g'ri formatdagi buyruqlar uchun ANIQ xato xabarlarini qaytaradi.

Bu — HTTP JSON API'ga MUQOBIL, YENGILROQ protokol: har bir buyruq bitta matn QATORI, va bu qatorlar tarmoq orqali (yoki bizning misolimizda — to'g'ridan-to'g'ri funksiya chaqiruvi orqali) yuborilishi mumkin. Redis'ning o'zi HAM shunga o'xshash (RESP deb ataluvchi) oddiy, matnga yaqin protokoldan foydalanadi.

>_ Exercise

Protokolga DEL (o'chirish) buyrug'ini qo'shing.

  • switch ichiga "DEL" case qo'shing: len(parts) != 2 bo'lsa xato, aks holda Command{Op: "DEL", Key: parts[1]} qaytaring
  • "DEL user:1" qatorini parseCommand orqali tahlil qiling
  • natijadagi cmd.Op va cmd.Key qiymatlarini chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Command protocol — oddiy matn qatorlarini strukturaviy buyruqlarga aylantirib, cache bilan HTTP/JSON'dan yengilroq, tezroq usulda muloqot qilish imkonini beradi.

NEXT UP

Client Library