Rumah > Artikel > pembangunan bahagian belakang > Bagaimana Golang akan menyelesaikan tugas kerja pertama anda
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.
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!