Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekodkan Slice []bait secara Idiomatik ke dalam int64 dalam Go?

Bagaimana untuk Mengekodkan Slice []bait secara Idiomatik ke dalam int64 dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 15:55:10639semak imbas

How to Idiomatically Encode a []byte Slice into an int64 in Go?

Pendekatan Lebih Idiomatik untuk Mengekodkan []bait Slice menjadi int64 dalam Go

Dalam Go, terdapat pelbagai cara untuk mengekodkan []potongan bait ke dalam int64. Walaupun kod yang disediakan menyelesaikan tugas, ia boleh dioptimumkan untuk kelancaran idiomatik yang lebih baik.

Kod Asal:

var data int64
for i := 0; i < 8; i++ {
    data |= int64(mySlice[i]&byte(255)) << uint((8*8)-((i+1)*8))
}

Pendekatan Idiomatik yang Diperbaiki:

Alternatif, pendekatan yang lebih idiomatik melibatkan penggunaan peralihan bit dan gelung melalui slice:

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    data := int64(0)
    for _, b := range mySlice {
        data = (data << 8) | int64(b)
    }
    fmt.Printf("%d\n", data)
}

Penjelasan:

Kod yang dipertingkatkan mengambil kesempatan daripada peralihan bit (<< dan >>) untuk melaksanakan pengekodan dengan cekap. Ia melelar melalui hirisan menggunakan sintaks julat, mengalihkan nilai data sebanyak 8 bit (<< 8) dan kemudian bitwise ORing (|) nilai bait semasa ke dalamnya. Ini secara berkesan menambahkan bait ke hujung paling kiri data tanpa menulis ganti bit sedia ada.

Kelebihan Pendekatan Idiomatik:

  • Keringkasan: Kod ini jauh lebih pendek dan lebih mudah dibaca.
  • Kejelasan: Memecahkan operasi manipulasi bit ke dalam langkah-langkah eksplisit meningkatkan pemahaman.
  • Peningkatan Prestasi: Peralihan bit adalah lebih cekap daripada operasi bitwise asal.
  • Keserasian: Pendekatan ini lebih sejajar dengan gaya idiomatik pengaturcaraan Go.

Atas ialah kandungan terperinci Bagaimana untuk Mengekodkan Slice []bait secara Idiomatik ke dalam int64 dalam Go?. 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