Rumah >pembangunan bahagian belakang >Golang >Gunakan go-zero untuk melaksanakan perkhidmatan web berprestasi tinggi

Gunakan go-zero untuk melaksanakan perkhidmatan web berprestasi tinggi

WBOY
WBOYasal
2023-06-22 21:51:141374semak imbas

Dengan perkembangan pesat aplikasi Internet, permintaan pengguna untuk perkhidmatan semakin tinggi, terutamanya keperluan untuk kelajuan tindak balas perkhidmatan, oleh itu, bagaimana untuk meningkatkan prestasi perkhidmatan telah menjadi satu cabaran yang perlu dihadapi oleh pembangun . Dalam konteks ini, menggunakan go-zero untuk melaksanakan perkhidmatan web berprestasi tinggi telah menjadi topik hangat.

Go-zero ialah alat untuk membina API berprestasi tinggi dan berskala dengan cepat dalam Go. Ia boleh membina perkhidmatan web berprestasi tinggi dengan mudah, menyokong panggilan RPC dan akses kepada API RESTful, serta melaksanakan rangka kerja HTTP dan GRPC, dll macam perjanjian.

Mari perkenalkan proses penggunaan go-zero untuk melaksanakan perkhidmatan web berprestasi tinggi.

1. Pasang go-zero

Memasang go-zero adalah sangat mudah, cuma jalankan arahan berikut:

go get -u github.com/tal-tech/go-zero

2. Buat projek

Kita boleh menggunakan alat goctl untuk menjana rangka kerja projek go-zero dengan cepat Perintahnya adalah seperti berikut:

goctl api new -o greet -d greet

Antaranya, "-o" menunjukkan nama projek yang ditentukan, dan "-d" menunjukkan yang ditentukan. nama modul.

3. Cipta perkhidmatan

Selepas mencipta rangka kerja projek, kami perlu mencipta perkhidmatan.

  1. Buat fail services/inventory.go dalam projek, kodnya adalah seperti berikut:
package services

import (
    "context"
    "greet/internal/model"
    "greet/internal/types"
)

type InventoryService struct{}

func NewInventoryService() *InventoryService {
    return &InventoryService{}
}

// 获取库存
func (s *InventoryService) GetInventory(ctx context.Context, req *types.InventoryRequest) (*types.InventoryResponse, error) {
    inventory := model.GetInventory(req.ProductId)
    if inventory == nil {
        return nil, ErrInventoryNotFound
    }
    return &types.InventoryResponse{
        Inventory: inventory.Count,
    }, nil
}
  1. Buat fail rpc/greet.proto dalam projek, kod Seperti berikut:
syntax = "proto3";
package greet;

message InventoryRequest {
  int64 product_id = 1;
}

message InventoryResponse {
  int32 inventory = 1;
}

service Greet {
  rpc GetInventory(InventoryRequest) returns (InventoryResponse);
}
  1. Laksanakan arahan berikut dalam projek untuk menyusun rpc:
goctl api rpc -api greet.proto -src . -dir .
  1. Ubah suai fail main.go , kodnya adalah seperti berikut:
package main

import (
    "flag"
    "github.com/tal-tech/go-zero/core/conf"
    "github.com/tal-tech/go-zero/core/service"
    "greet/internal/config"
    "greet/internal/server"
    "greet/internal/svc"
)

var configFile = flag.String("f", "etc/greet-api.yaml", "the config file")

func main() {
    flag.Parse()

    var c config.Config
    conf.MustLoad(*configFile, &c)

    ctx := svc.NewServiceContext(c)
    server := server.NewGreetServer(ctx)

    s := service.New(server, service.WithName(c.Name))
    s.Start()
}

4 Mulakan perkhidmatan

Laksanakan arahan berikut dalam direktori akar projek untuk memulakan perkhidmatan:

go run main.go -f etc/greet-api.yaml

5. . Uji perkhidmatan

Gunakan grpcurl untuk menguji perkhidmatan Gunakan arahan berikut untuk menguji kaedah GetInventory:

grpcurl -plaintext -proto rpc/greet.proto -d '{"product_id": 1}' localhost:8080 greet.Greet.GetInventory

输出结果如下:

{
    "inventory": 10
}

Pada ketika ini, kami telah berjaya melaksanakan perkhidmatan Web berprestasi tinggi menggunakan go. -sifar.

Ringkasan: Menggunakan go-zero untuk melaksanakan perkhidmatan Web berprestasi tinggi agak mudah dan menyokong berbilang protokol, yang boleh membantu pembangun membina perkhidmatan Web berprestasi tinggi dengan cepat. Jika anda ingin meningkatkan kelajuan tindak balas perkhidmatan anda, anda juga boleh cuba menggunakan go-zero untuk membina perkhidmatan web anda!

Atas ialah kandungan terperinci Gunakan go-zero untuk melaksanakan perkhidmatan web berprestasi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn