>백엔드 개발 >Golang >Go에서 일정 시간 동안 올바르게 잠을 자는 방법은 무엇입니까?

Go에서 일정 시간 동안 올바르게 잠을 자는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 04:28:13667검색

How to Correctly Sleep for Fractions of a Time Duration in Go?

잠자리 시간의 분수

Go에서는 시간을 사용하여 짧은 시간 동안 잠을 잘 수 있습니다. () 함수는 time.Duration을 인수로 사용합니다. 그러나 기간의 일부를 지정하려고 하면 코드 구조에 따라 다른 동작이 발생할 수 있습니다.

다음 두 가지 시나리오를 고려하세요.

// Case 1: Works
s := time.Hour / 73.0
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Case 2: Fails
d := 73.0
s := time.Hour / d
fmt.Println("sleeping: ", s)
time.Sleep(s) // Error: time.Hour / d (mismatched types time.Duration and float64)

사례 1의 경우 코드가 성공적으로 실행되었습니다. 한 시간도 안 되는 시간 동안 잠을 자지만 사례 2에서는 유형 불일치 오류로 인해 실패합니다. 그 이유를 이해하려면 Go에서 상수와 유형이 처리되는 방식을 이해하는 것이 중요합니다.

상수 표현식 이해

Go에서 상수는 강력한 유형을 가지며 유형이 지정되지 않을 수도 있습니다. (기본 유형 사용) 또는 명시적으로 입력됩니다.

사례 1의 경우 time.Hour는 유형이 지정된 상수입니다. 시간.기간. time.Hour를 73.0으로 나눌 때 Go는 자동으로 유형이 지정되지 않은 상수 73.0을 time.Duration으로 변환하여 time.Hour / time.Duration(73.0).

유형 및 불일치 유형 추론

경우 2에서 d는 다음으로 초기화된 유형이 지정되지 않은 상수입니다. 73.0. 유형이 필요하므로 Go는 상수 값을 기반으로 유형을 추론하여 d가 float64가 됩니다.

나중에 time.Hour를 d(현재 유형은 float64임)로 나누려고 하면 Go는 다음을 감지합니다. 유형 불일치. 시간 분할.Duration 및 float64는 Go에서 허용되지 않습니다.

유형 불일치 해결

유형 불일치를 해결하려면 d를 명시적으로 시간으로 변환할 수 있습니다.Duration 나눗셈을 수행하기 전에:

s := time.Hour / time.Duration(d)
또는 d를 다음과 같이 직접 정의할 수도 있습니다. time.Duration 변수:

d := time.Duration(73.0)
s = time.Hour / d
또는 변수 선언에서 유형 변환 사용:

var d time.Duration = 73.0
s = time.Hour / d

time.Duration으로 표현할 수 없는 값 처리

나누기 결과를 시간으로 표현할 수 없는 경우. 기간(예: 시간을 다음으로 나누기) 73.5), time.Hour를 float64로 변환하고, 나누기를 수행한 다음 결과를 time.Duration으로 변환합니다.

d := 73.5
s := time.Duration(float64(time.Hour) / d)
유형 변환 규칙을 이해하고 필요한 경우 명시적으로 변환을 처리하면 성공적으로 작업을 수행할 수 있습니다. Go에서 아주 짧은 시간 동안 잠을 자세요.

위 내용은 Go에서 일정 시간 동안 올바르게 잠을 자는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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