Dalam senario tertentu, terutamanya apabila berurusan dengan fungsi cincang, pembangun mungkin perlu menukar nilai uint64 kepada int64 sambil mengekalkan perwakilan binarinya . Ini kelihatan seperti operasi yang mudah, tetapi boleh mengelirukan kerana potensi limpahan.
Sebagai contoh, fungsi cincang murmur2 menjana hasil uint64. Apabila bekerja dengan PostgreSQL, yang hanya menyokong int64 (64 bit yang ditandatangani), pembangun mungkin menginginkan penukaran jenis yang mengekalkan nilai binari cincang.
Mujurlah, penukaran ini adalah remeh. Hanya gunakan penukaran jenis:
i := uint64(0xffffffffffffffff) i2 := int64(i)
Output yang terhasil ialah:
18446744073709551615 -1
Adalah penting untuk ambil perhatian bahawa perwakilan memori kekal sama selepas penukaran; hanya jenis yang diubah.
Walau bagaimanapun, terdapat kaveat apabila menukar pemalar integer yang tidak ditaip kepada int64. Contohnya:
i3 := int64(0xffffffffffffffff) // Compile time error!
Mencuba penukaran ini menghasilkan ralat masa kompilasi kerana nilai 0xffffffffffffffff melebihi nilai int64 maksimum (0x7fffffffffffffffff). Dalam kes sedemikian, pembangun mesti menggunakan jenis uint64 atau mengendalikan penukaran secara eksplisit.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Menukar uint64 kepada int64 dengan Selamat dalam Go, Mengekalkan Perwakilan Binarinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!