badan bacaan ralat golang

王林
Lepaskan: 2023-05-15 11:18:07
asal
1078 orang telah melayarinya

Apabila membangun di Golang, kami selalunya perlu menghantar permintaan ke antara muka lain dan kemudian membaca kandungan badan respons. Walau bagaimanapun, dalam proses pembangunan sebenar, kita sering menghadapi beberapa kesilapan dalam membaca kandungan badan Mari kita meneroka punca dan penyelesaian masalah ini.

  1. Analisis sebab:

1.1. Tamat masa permintaan rangkaian

Selepas permintaan rangkaian dihantar, jika tiada respons diterima dalam masa yang ditetapkan, a masa tamat akan berlaku. Dalam kes ini, membaca kandungan badan tindak balas akan gagal.

Penyelesaian: Untuk ralat tamat masa, kita boleh menggunakan pakej konteks untuk menetapkan tamat masa untuk mengelakkan ralat tersebut.

1.2. Pengecualian kod status permintaan HTTP

Apabila membuat permintaan HTTP, apabila menerima kod status tertentu, seperti 401, 403, dll., pelayan akan mengembalikan mesej ralat masa, baca Mengambil kandungan badan respons akan gagal.

Penyelesaian: Dalam permintaan HTTP, kami boleh menilai sama ada permintaan itu berjaya mengikut kod status respons Untuk kod status bukan 200, kami boleh mendapatkan gesaan pengecualian dengan membaca maklumat ralat.

Kod contoh:

resp, err := http.Get("https://example.com")

if err != nil {
    log.Fatal(err)
}

defer resp.Body.Close()

if resp.StatusCode != http.StatusOK {
    data, _ := ioutil.ReadAll(resp.Body)
    log.Println("Response Error: ", string(data))
    return
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

1.3. Pengecualian sambungan rangkaian

Apabila membuat permintaan rangkaian, jika sambungan rangkaian tidak normal, membaca kandungan badan respons akan gagal.

Penyelesaian: Untuk memastikan kestabilan sambungan rangkaian, kami boleh meningkatkan tamat masa sambungan rangkaian, dan untuk situasi tidak normal seperti gangguan sambungan rangkaian, kami perlu melakukan pengendalian pengecualian.

Kod sampel:

client := &http.Client{
    Timeout: time.Second * 10,
}

resp, err := client.Do(req)

if err != nil {
    log.Fatal(err)
}

defer resp.Body.Close()

if resp.StatusCode != http.StatusOK {
    data, _ := ioutil.ReadAll(resp.Body)
    log.Println("Response Error: ", string(data))
    return
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatal(err)
}
Salin selepas log masuk
  1. Ringkasan:

Dalam pembangunan Golang, kegagalan membaca kandungan badan tindak balas mungkin berlaku dalam pelbagai situasi, seperti rangkaian Permintaan tamat masa, pengecualian kod status permintaan HTTP, pengecualian sambungan rangkaian, dsb. Melalui pengendalian pengecualian yang munasabah dan penghakiman ralat, kita boleh mengelakkan kesan buruk masalah ini pada program. Pada masa yang sama, adalah disyorkan bahawa semasa menghantar permintaan rangkaian, cuba gunakan perpustakaan standard yang disediakan oleh Golang untuk memastikan kebolehpercayaan dan kecekapan kod.

Atas ialah kandungan terperinci badan bacaan ralat golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan