> 백엔드 개발 > Golang > Go의 `time.Sleep()`이 상수 유형에 따라 분수 기간을 다르게 처리하는 이유는 무엇입니까?

Go의 `time.Sleep()`이 상수 유형에 따라 분수 기간을 다르게 처리하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-30 06:05:09
원래의
335명이 탐색했습니다.

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

Go에서 수면 시간의 비율

질문:

다음이 Go되는 이유 코드는 짧은 시간 동안 성공적으로 절전 모드로 전환되고 두 번째 코드는 성공적으로 잠자기 상태가 됩니다. 실패합니까?

// 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)
로그인 후 복사

답변:

차이점은 각 줄의 제수 유형에 있습니다.

  • 성공: 73.0은 유형이 지정되지 않은 숫자 상수입니다. time.Hour / 73.0.
  • 실패: d는 명시적으로 float64로 입력되며 time.Duration으로 나눌 수 없습니다.

두 번째 줄이 작동하도록 하려면 d를 다음으로 변환해야 합니다. time.Duration:

s := time.Hour / time.Duration(d)
로그인 후 복사

또는 다음 대체 방법 중 하나를 사용하세요.

  • d := time.Duration(73.0)
  • var d time. 기간 = 73.0

표현할 수 없는 값의 경우 time.Duration(예: 73.5), time.Hour는 float64로 변환해야 합니다.

d := 73.5
s := time.Duration(float64(time.Hour) / d)
로그인 후 복사

추가 고려 사항:

  • 상수: time.Hour와 같은 상수는 변경할 수 없는 유형이므로 직접 사용할 수 없습니다. 호환되지 않는 유형을 사용합니다.
  • 유형이 지정되지 않은 상수: 유형이 지정되지 않은 상수는 사용된 컨텍스트의 유형을 따릅니다. 첫 번째 줄에서 73.0은 time.Duration에 적용됩니다.
  • 유형 변환: 호환성을 보장하려면 time.Duration(d)와 같은 명시적인 유형 변환이 필요합니다. 다양한 유형 사이에서.

위 내용은 Go의 `time.Sleep()`이 상수 유형에 따라 분수 기간을 다르게 처리하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿