Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Golang akan menyelesaikan tugas kerja pertama anda

Bagaimana Golang akan menyelesaikan tugas kerja pertama anda

WBOY
WBOYasal
2024-07-17 21:50:35541semak imbas

Golang, atau hanya Go, telah dikenali sebagai bahasa Go gopher. Jika anda masih tidak faham mengapa gopher anda boleh menemui sejarah maskot yang mengejutkan dalam artikel ini. Baiklah, mari kita mulakan dari awal, Golang telah dikenali sebagai salah satu bahasa pengaturcaraan yang paling produktif di luar sana. Tidak seperti bahasa tradisional seperti Java atau Python, Go mencapai keseimbangan unik antara kod yang mudah ditulis dan pelaksanaan pantas, mempercepatkan pembangunan dan mengurangkan masa penyahpepijatan dan ujian. Artikel ini akan melihat contoh dunia sebenar menggunakan goroutin dan konteks dalam projek yang berinteraksi dengan perkhidmatan mikro REST API yang perlahan dan tidak stabil.

Tugas
Bayangkan anda baru sahaja menyertai pasukan dan ketua pasukan anda meminta anda untuk mengikat perkhidmatan mikro baharu yang ditulis dalam Golang (contohnya pengurus risiko) kepada perkhidmatan mikro pengguna yang terdedah melalui REST API.

Masalahnya
Pengurus risiko perlu berinteraksi dengan API REST yang boleh menjadi perlahan dan tidak stabil, yang memerlukan kami mengendalikan permintaan sedemikian dengan berhati-hati. Saya akan menggunakan goroutine untuk permintaan dan konteks HTTP tak segerak untuk mengurus tamat masa permintaan dan pengendalian ralat.

Penyelesaian

Menggunakan gorouti dan konteks dalam Golang membolehkan pengurusan tugas serentak yang cekap dan pengendalian API luaran yang perlahan atau tidak stabil.

Langkah pertama untuk mentafsirnya dalam kod ialah mencipta API, saya menggunakan perkhidmatan shareware https://mockapi.io/ Menjana REST adalah mudah API dengan set asas entiti, seperti pengguna.

Image description

Katakan seseorang telah mencuba yang terbaik dan syarikat anda mempunyai perkhidmatan dalaman yang menyenaraikan pengguna. Tugas kami adalah untuk menggunakan semula senarai pengguna dalam pengurus risiko baharu (struktur data pengguna memenuhi kontrak yang diterangkan oleh mockapi.io). Kod di bawah membuat permintaan, memproses isi dan menghasilkan sama ada senarai pengguna atau ralat yang sepadan.

type User struct {
    CreatedAt string
    Name      string
    Avatar    string
    Id        string
}

// Original slow request
func fetchUsers(ctx context.Context) (*[]User, error) {
    resp, err := http.Get("https://<use your id after sign up>.mockapi.io/api/v1/users")
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("failed to fetch users: %s", resp.Status)
    }

    var users []User
    if err := json.NewDecoder(resp.Body).Decode(&users); err != nil {
        return nil, err
    }

    return &users, nil
}

Untuk mengawal operasi, saya akan menggunakan konteks induk paling atas untuk semua konteks lain - konteks.Latar Belakang. Saya akan menambah konteks ini dengan data baharu, dalam kes ini tamat masa - context.WithTimeout, yang akan saya takrifkan sebagai 2 saat. Anda boleh membaca lebih lanjut tentang bekerja dengan konteks dalam Go dalam artikel ini.

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

usersChan := make(chan *[]User)
errChan := make(chan error)

go func() {
    users, err := fetchUsers(ctx)
    if err != nil {
        errChan <- err
        return
    }
    usersChan <- user
}()

select {
case users := <-usersChan:
    fmt.Printf("Fetched users: %+v\n", users)
case err := <-errChan:
    fmt.Printf("Error fetching users: %v\n", err)
case <-ctx.Done():
    fmt.Println("Request timed out")
}

Dalam contoh, saya menggunakan dua saluran - usersChan untuk merekodkan hasil yang diterima daripada perkhidmatan dalaman kami dan saluran kedua errChan - untuk merekodkan ralat.
Jika respons daripada API perlahan tidak sampai dalam masa 2 saat, kami mengesan ralat dan memberi peluang untuk memprosesnya dengan betul pada lapisan luaran.

Dalam contoh praktikal dengan pengurus risiko ini, goroutine mendayakan permintaan HTTP tak segerak, manakala konteks memastikan pengendalian tamat masa, yang penting untuk membina perkhidmatan mikro yang boleh dipercayai dan berdaya tahan.

P.S.

Artikel ini ditujukan untuk pembangun pemula yang mempunyai pengetahuan asas, tetapi sedikit idea tentang tempat mereka boleh menggunakan pengetahuan mereka. Saya akan gembira menerima maklum balas anda dan dengan senang hati akan menjawab soalan anda.
Contoh yang berfungsi dan beberapa pelaksanaan lain bagi perkara paling asas dalam bahasa Go boleh didapati di GitHub saya, di pautan

Atas ialah kandungan terperinci Bagaimana Golang akan menyelesaikan tugas kerja pertama anda. 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