W poniższym przykładzie, jeśli 1000-y są zarówno int (które myślę, że są), dlaczego nie uda się skompilować dna?time.Millisecond * int confusion
//works
time.Sleep(1000 * time.Millisecond)
//fails
var i = 1000
time.Sleep(i * time.Millisecond)
W poniższym przykładzie, jeśli 1000-y są zarówno int (które myślę, że są), dlaczego nie uda się skompilować dna?time.Millisecond * int confusion
//works
time.Sleep(1000 * time.Millisecond)
//fails
var i = 1000
time.Sleep(i * time.Millisecond)
Operatorzy łączą argumentów do wyrażeń.
Porównania są omówione w innym miejscu. W przypadku innych operatorów binarnych typy operandów muszą być identyczne, chyba że operacja wymaga przesunięć lub stałych bez znaku. W przypadku operacji obejmujących tylko stałe, zobacz rozdział na temat wyrażeń stałych.
Z wyjątkiem operacji zmiany, jeśli jeden operand jest stałą bez typu i , drugi operand nie jest, stała jest konwertowana na typ innego operandu .
Na przykład, stosując (rozmnażanie) operatora "*
"
package main
import (
"time"
)
func main() {
// works - 1000 is an untyped constant
// which is converted to type time.Duration
time.Sleep(1000 * time.Millisecond)
// fails - v is a variable of type int
// which is not identical to type time.Duration
var v = 1000
// invalid operation: i * time.Millisecond (mismatched types int and time.Duration)
time.Sleep(v * time.Millisecond)
}
Go nie będzie automatycznie konwertować typów liczbowych dla Ciebie. O ile rozumiem, 1000 nie jest typem liczbowym dopóki nie zostanie zdefiniowany jako jeden.
specyfikacji język mówi:
konwersji wymagane jest, gdy różne typy liczbowe miesza się w ekspresji lub przydziału. Na przykład int32 i int nie są tego samego typu, mimo że mogą mieć ten sam rozmiar w konkretnej architekturze.
'1000' jest niezmodyfikowaną stałą numeryczną. [Constants] (http://golang.org/ref/spec#Constants) – peterSO
Oba operand muszą być tego samego typu time.Duration. Możesz użyć time.Sleep (v * time.Millisecond).
Wyświetlemy komunikat o błędzie. –
Komunikat o błędzie: 'invalid operation: i * time.Millisecond (niedopasowane typy int i time.Duration)'. – Kavu
@Kavu huh ... zaskakuje mnie poprzednie prace, następnie –