Dalam Go, masa.Masa dan masa.Jenis Tempoh adalah lazim untuk bekerja dengan operasi berkaitan masa. Walau bagaimanapun, mungkin terdapat sedikit kekeliruan semasa berurusan dengan pendaraban integer dan jenis ini.
Kod berikut menunjukkan kekeliruan ini:
//works time.Sleep(1000 * time.Millisecond) //fails var i = 1000 time.Sleep(i * time.Millisecond)
Blok kod kedua gagal dihimpun kerana jenis yang tidak sepadan . Walaupun kedua-dua 1000 dalam kod kelihatan sebagai integer, ini tidak berlaku.
Dalam Go, pengendali memerlukan operan daripada jenis yang sama, kecuali operator yang melibatkan anjakan atau pemalar yang tidak ditaip. Untuk kes kami, kami mempunyai pendaraban, yang bermaksud operan mestilah sama.
Dalam baris pertama, 1000 ialah pemalar yang tidak ditaip. Apabila digunakan dalam operasi, ia ditukar secara automatik kepada jenis operan lain, yang dalam kes ini ialah masa. Tempoh. Walau bagaimanapun, dalam baris kedua, i ialah pembolehubah jenis int yang diisytiharkan, yang mengakibatkan ketidakpadanan jenis.
Untuk menyelesaikan isu ini, kita perlu menukar i kepada masa. Tempoh sebelum melakukan pendaraban. Berikut ialah contoh:
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
Dengan menukar i kepada masa. Tempoh, pendaraban dan masa berikutnya. Panggilan tidur kini akan berjaya.
Atas ialah kandungan terperinci Mengapa Time.Sleep(i * time.Millisaat) Gagal Disusun dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!