una resueltos positivos por numeros negativos multiplicar multiplicacion mixta fracciones fraccion enteros entero ejercicios ejemplos con como go

go - resueltos - multiplicacion y division de numeros enteros ejercicios



¿Cómo multiplicar la duración por número entero? (3)

En Go, puede multiplicar variables del mismo tipo, por lo que debe tener las dos partes de la expresión del mismo tipo.

Lo más simple que puede hacer es convertir un entero en duración antes de multiplicar, pero eso violaría la semántica de la unidad. ¿Cuál sería la multiplicación de duración por duración en términos de unidades?

Prefiero convertir el tiempo. Encender a un int64, y luego multiplicarlo por el número de milisegundos, y luego convertirlo en tiempo.Duración:

time.Duration(int64(time.Millisecond) * int64(rand.Int31n(1000)))

De esta forma, se puede decir que cualquier parte de la expresión tiene un valor significativo de acuerdo con su tipo. int64(time.Millisecond) es solo un valor sin dimensiones: el número de unidades de tiempo más pequeñas en el valor original.

Si camina un camino un poco más simple:

time.Duration(rand.Int31n(1000)) * time.Millisecond

La parte izquierda de la multiplicación no tiene sentido - un valor de tipo "time.Duration", que contiene algo irrelevante para su tipo:

numberOfMilliseconds := 100 // just can''t come up with a name for following: someLHS := time.Duration(numberOfMilliseconds) fmt.Println(someLHS) fmt.Println(someLHS*time.Millisecond)

Y no es solo semántica, hay una funcionalidad real asociada con los tipos. Este código se imprime:

100ns 100ms

Curiosamente, el ejemplo de código aquí utiliza el código más simple, con la misma semántica engañosa de la conversión de Duración: https://golang.org/pkg/time/#Duration

segundos: = 10

fmt.Print (time.Duration (seconds) * time.Second) // imprime 10s

Para probar los goroutines concurrentes, agregué una línea a una función para hacer que tomara un tiempo aleatorio para regresar (hasta un segundo)

time.Sleep(rand.Int31n(1000) * time.Millisecond)

Sin embargo, cuando compilé, obtuve este error

. / crawler.go: 49: operación no válida: rand.Int31n (1000) * time.Millisecond (tipos no coincidentes int32 y time.Duration)

¿Algunas ideas? ¿Cómo puedo multiplicar una duración?


Tienes que convertirlo en un campo de Playground formato correcto.

yourTime := rand.Int31n(1000) time.Sleep(time.Duration(yourTime) * time.Millisecond)

Si revisa la documentación de sleep , verá que requiere la duración de la func Sleep(d Duration) como parámetro. Su rand.Int31n devuelve int32 .

La línea del ejemplo funciona ( time.Sleep(100 * time.Millisecond) ) porque el compilador es lo suficientemente inteligente como para entender que aquí su blog.golang.org/constants 100 significa una duración. Pero si pasas una variable, debes lanzarla.


int32 y time.Duration son tipos diferentes. Necesita convertir el int32 a un time.Duration , como time.Sleep(time.Duration(rand.Int31n(1000)) * time.Millisecond) .