Go의 "time.Millisecond * int" 불일치 이해
제공된 코드 조각에서 두 표현식 모두 곱셈 연산자 "*"를 포함합니다. time.Millisecond 값을 활용합니다. 그러나 이러한 표현식의 컴파일 성공에는 차이가 있습니다. 이를 이해하기 위해 Go에서 연산자 사용의 기본 사항을 살펴보겠습니다.
Go는 연산자에 대해 엄격한 유형 검사를 시행하여 피연산자가 동일한 유형이어야 합니다. 피연산자의 유형이 다르면 연산에 시프트나 유형이 지정되지 않은 상수가 포함되지 않는 한 컴파일러에서 오류가 발생합니다.
첫 번째 코드 블록에서 첫 번째 피연산자 1000은 유형이 지정되지 않은 상수. 형식화되지 않은 상수가 상수만 포함하는 연산에 사용되면 암시적으로 다른 피연산자의 형식으로 변환됩니다. 이 경우 time.Millisecond는 time.Duration 유형이므로 성공적으로 변환됩니다.
두 번째 코드 블록에서 첫 번째 피연산자 i는 변수입니다. int 유형입니다. 변수와 유형이 지정되지 않은 상수가 작업에 포함된 경우 유형 검사 규칙은 암시적 변환을 허용하지 않습니다. 따라서 컴파일러는 오류 플래그를 지정합니다. 잘못된 작업: i * time.Millisecond(int 및 time.Duration 유형이 일치하지 않음)
이 문제를 해결하려면 i 변수를 명시적으로 변환할 수 있습니다. 다음 코드에 설명된 대로 time.Duration(i) 함수를 사용하여 time.Duration으로 변환합니다.
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
이 변환은 다음을 보장합니다. 피연산자의 유형이 동일하여 Go의 유형 검사 요구 사항을 충족하고 코드가 성공적으로 컴파일될 수 있도록 합니다.
위 내용은 Go에서 'time.Millisecond * int'는 컴파일에 실패하지만 'time.Millisecond * 1000'은 성공하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!