Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pura-pura dalam golang

Bagaimana untuk melaksanakan pura-pura dalam golang

PHPz
PHPzasal
2023-04-23 10:08:03917semak imbas

Dalam beberapa tahun kebelakangan ini, dengan populariti seni bina perkhidmatan mikro, semakin banyak syarikat telah mula menggunakan perkhidmatan mikro untuk membina sistem perisian. Dalam perkhidmatan mikro, komunikasi antara perkhidmatan adalah penting, jadi cara yang cekap dan boleh dipercayai untuk memanggil perkhidmatan diperlukan. Dalam ekosistem Java, Feign, sebagai rangka kerja panggilan perkhidmatan mikro yang biasa digunakan, telah digunakan secara meluas. Walau bagaimanapun, belum ada rangka kerja Feign yang baik untuk Golang, jadi pembangun Golang perlu menggunakan kaedah lain untuk mencapai komunikasi antara perkhidmatan mikro. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan rangka kerja panggilan perkhidmatan mikro yang serupa dengan Feign.

Berikut ialah langkah untuk melaksanakan Feign di Golang:

Langkah 1: Pasang dan perkenalkan perpustakaan yang diperlukan

Di Golang, kita perlu menggunakan perpustakaan HTTP untuk HTTP komunikasi, Pada masa yang sama, beberapa perpustakaan tambahan diperlukan untuk mengendalikan komunikasi HTTP. Anda boleh menggunakan Modul Go untuk mengurus kebergantungan dan anda juga boleh menggunakan arahan go get untuk memasang perpustakaan ini Dalam artikel ini, kami akan menggunakan arahan go get untuk memasang perpustakaan http, fmt dan perpustakaan lain yang diperlukan.

Langkah 2: Tentukan antara muka

Di Golang, kami boleh mentakrifkan antara muka untuk mentakrifkan semua panggilan dalam perkhidmatan mikro. Antara muka harus mengandungi semua kaedah yang perlu dipanggil, dan setiap kaedah harus mempunyai parameter seperti URL permintaan, kaedah permintaan, pengepala permintaan dan badan permintaan. Contohnya:

type UserService interface {
    GetUserByID(ctx context.Context, id int64) (*User, error)
    CreateUser(ctx context.Context, user *User) error
    UpdateUser(ctx context.Context, user *User) error
    DeleteUserByID(ctx context.Context, id int64) error
}

Dalam kod di atas, kami mentakrifkan antara muka UserService, yang mengandungi 4 kaedah: GetUserByID, CreateUser, UpdateUser dan DeleteUserByID. Kaedah ini akan digunakan untuk memanggil perkhidmatan pengguna jauh.

Langkah 3: Laksanakan antara muka

Pertama, anda perlu mencipta struktur Klien baharu untuk melaksanakan antara muka Perkhidmatan Pengguna, dan mentakrifkan beberapa atribut yang diperlukan dalam struktur (contohnya, URL asas bagi perkhidmatan jauh, klien HTTP, dll.). Kemudian, setiap kaedah antara muka perlu dilaksanakan secara berasingan. Setiap kaedah harus membina permintaan HTTP yang sepadan berdasarkan kaedah permintaan (seperti GET atau POST) dan menghantar semua parameter yang diperlukan kepada permintaan. Kami boleh menggunakan perpustakaan HTTP yang biasa digunakan di Golang untuk membina permintaan dan menyahsiri respons permintaan ke dalam objek yang diperlukan. Contohnya:

type UserClient struct {
    BaseURL    string
    HTTPClient http.Client
}

func (c *UserClient) GetUserByID(ctx context.Context, id int64) (*User, error) {
    req, _ := http.NewRequestWithContext(ctx, http.MethodGet, c.BaseURL+"/users/"+strconv.FormatInt(id, 10), nil)
    resp, err := c.HTTPClient.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("unexpected status code: %v", resp.StatusCode)
    }
    var user User
    if err := json.NewDecoder(resp.Body).Decode(&user); err != nil {
        return nil, err
    }
    return &user, nil
}

func (c *UserClient) CreateUser(ctx context.Context, user *User) error {
    reqBody, _ := json.Marshal(user)
    req, _ := http.NewRequestWithContext(ctx, http.MethodPost, c.BaseURL+"/users", bytes.NewBuffer(reqBody))
    req.Header.Set("Content-Type", "application/json")
    resp, err := c.HTTPClient.Do(req)
    if err != nil {
        return err
    }
    defer resp.Body.Close()
    if resp.StatusCode != http.StatusCreated {
        return fmt.Errorf("unexpected status code: %v", resp.StatusCode)
    }
    return nil
}

...

Dalam kod di atas, kami melaksanakan kaedah GetUserByID dan CreateUser. Contohnya, kaedah GetUserByID menjana permintaan HTTP berdasarkan kaedah permintaan, URL permintaan dan parameter permintaan serta menggunakan klien HTTP untuk membuat permintaan kepada perkhidmatan jauh. Kemudian, nyahsiri respons menjadi objek Pengguna dan kembalikannya. Kaedah CreateUser adalah serupa, tetapi menambahkan Pengguna sebagai badan permintaan pada permintaan HTTP.

Langkah 4: Gunakan antara muka yang dilaksanakan

Kini, kita boleh menggunakan struktur Klien dalam aplikasi utama untuk memanggil kaedah yang ditakrifkan dalam antara muka UserService. Contohnya:

func main() {
    client := &UserClient{
        BaseURL:    "http://localhost:8080",
        HTTPClient: http.Client{},
    }
    user, _ := client.GetUserByID(context.Background(), 1)
    fmt.Println(user.Name)
    newUser := &User{Name: "Bob"}
    client.CreateUser(context.Background(), newUser)
}

Dalam kod di atas, kami mula-mula mencipta tika UserClient dan kemudian menggunakan tika itu untuk memanggil kaedah GetUserByID dan CreateUser. Dalam kaedah GetUserByID, kami lulus konteks Ini adalah untuk memastikan tamat masa dan pembatalan konteks dikendalikan dengan betul.

Ringkasan

Melalui artikel ini, kami mempelajari cara menggunakan Golang untuk melaksanakan rangka kerja panggilan perkhidmatan mikro yang serupa dengan Feign. Menggunakan rangka kerja ini, kami boleh memanggil perkhidmatan mikro lain dengan mudah dalam aplikasi Golang tanpa membina permintaan HTTP secara manual. Selain itu, kami juga mempelajari cara mentakrif dan melaksanakan komunikasi antara perkhidmatan mikro di Golang menggunakan antara muka dan struktur. Pengguna boleh melanjutkan rangka kerja dengan melaksanakan antara muka dalam struktur Pelanggan untuk menyokong lebih banyak panggilan perkhidmatan mikro.

Akhir sekali, adalah penting untuk ambil perhatian bahawa artikel ini hanyalah satu contoh. Dalam penggunaan sebenar, lebih banyak faktor perlu dipertimbangkan, seperti keselamatan, prestasi dan kebolehselenggaraan.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pura-pura dalam golang. 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