>백엔드 개발 >Golang >Go에서 'time.Millisecond * int'는 컴파일에 실패하지만 'time.Millisecond * 1000'은 성공하는 이유는 무엇입니까?

Go에서 'time.Millisecond * int'는 컴파일에 실패하지만 'time.Millisecond * 1000'은 성공하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 14:40:03193검색

Why Does

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.