Rumah > pembangunan bahagian belakang > Golang > Mengapakah `time.Sleep()` Go Mengendalikan Tempoh Pecahan Berbeza Berdasarkan Jenis Pemalar?

Mengapakah `time.Sleep()` Go Mengendalikan Tempoh Pecahan Berbeza Berdasarkan Jenis Pemalar?

Barbara Streisand
Lepaskan: 2024-12-30 06:05:09
asal
335 orang telah melayarinya

Why Does Go's `time.Sleep()` Handle Fractional Durations Differently Based on Constant Type?

Fraksi Masa Tempoh Tidur dalam Go

Soalan:

Mengapa yang berikut Pergi kod berjaya tidur untuk tempoh pecahan, manakala yang kedua gagal?

// Success
s := time.Hour / 73.0
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Failure
d := 73.0
s := time.Hour / d
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Error: invalid operation: time.Hour / d (mismatched types time.Duration and float64)
Salin selepas log masuk

Jawapan:

Perbezaannya terletak pada jenis pembahagi dalam setiap baris:

  • Kejayaan: 73.0 ialah pemalar berangka yang tidak ditaip, yang menyesuaikan diri dengan masa. Tempoh dalam ungkapan masa.Jam / 73.0.
  • Kegagalan: d ditaip secara eksplisit sebagai float64, yang tidak boleh dibahagikan dengan masa. Tempoh.

Untuk membuat baris kedua bekerja, anda mesti menukar d kepada masa. Tempoh:

s := time.Hour / time.Duration(d)
Salin selepas log masuk

atau gunakan salah satu daripada yang berikut cara alternatif:

  • d := masa.Duration(73.0)
  • var d time.Duration = 73.0

Untuk nilai yang tidak boleh diwakili dalam masa.Tempoh, seperti 73.5, masa.Jam mesti ditukar kepada float64:

d := 73.5
s := time.Duration(float64(time.Hour) / d)
Salin selepas log masuk

Pertimbangan Lanjut:

  • Pemalar: Pemalar seperti masa.Jam mempunyai jenis yang tidak boleh diubah, jadi ia tidak boleh digunakan secara langsung dengan jenis yang tidak serasi.
  • Tidak ditaip Pemalar: Pemalar yang tidak ditaip mengambil jenis konteks yang digunakan. Dalam baris pertama, 73.0 menyesuaikan diri dengan masa. Tempoh.
  • Penukaran Jenis: Penukaran jenis eksplisit seperti masa. Tempoh(d) adalah perlu untuk memastikan keserasian antara jenis yang berbeza.

Atas ialah kandungan terperinci Mengapakah `time.Sleep()` Go Mengendalikan Tempoh Pecahan Berbeza Berdasarkan Jenis Pemalar?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan