>  기사  >  백엔드 개발  >  Go에서 `==`를 사용하여 시간 값을 비교하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Go에서 `==`를 사용하여 시간 값을 비교하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-25 05:10:02833검색

Why Does Comparing Time Values in Go With `==` Lead to Unexpected Results?

Go 시간 비교: 시간대 차이 탐색

Go에서는 시간대 변환 처리가 복잡할 수 있습니다. 시간 값을 항등 연산자(==)로 비교하면 예상치 못한 결과가 나오는 상황을 살펴보겠습니다.

문제:

개발자가 시간을 UTC에서 UTC로 변환하려고 합니다. 0700 WIB는 두 가지 기능(GenerateWIB 및 generateUTC)을 사용합니다. generateUTC는 의도한 대로 작동하는 반면, generateWIB는 다른 결과를 생성합니다. 조사 결과 두 시간이 동일하게 나타나 혼란을 야기합니다.

해결책:

문제는 시간 값을 비교하는 데 사용되는 방법에 있습니다. Go의 항등 연산자(==)는 시간 순간뿐만 아니라 시간 값의 위치 및 단조 시계 읽기도 고려합니다. 이로 인해 시간 값을 다른 위치나 시계 판독값과 비교할 때 예상치 못한 결과가 발생할 수 있습니다.

시간 값을 올바르게 비교하려면 .Equal() 메서드를 사용하는 것이 좋습니다. .Equal()은 위치 및 시계 판독 차이를 무시하는 보다 정확한 비교를 사용합니다.

기술적 설명:

Go의 시간 값은 time.Time 구조체로 표시됩니다. , 여기에는 wall, ext 및 loc의 세 가지 비공개 필드가 포함되어 있습니다. 이러한 필드는 각각 벽시계 타임스탬프, 선택적 단조 시계 판독값 및 위치로 시간을 나타냅니다. ==를 사용하여 시간 값을 비교할 때 이러한 필드의 값이 비교됩니다. 그러나 .Equal()은 위치나 시계 판독값의 차이를 무시하고 값으로 표시되는 시간 순간을 비교합니다.

제공된 예에서 GenericWIB()는 시간을 0700 WIB로 변환하고 t1은 UTC로 유지됩니다. . 이로 인해 위치 필드는 다르지만 시간 인스턴스가 동일한 두 개의 time.Time 값이 생성됩니다. ==를 사용하여 비교할 때 서로 다른 위치 필드로 인해 비교가 실패합니다. 그러나 .Equal()은 시간 순간이 동일한지 정확하게 식별합니다.

결론:

Go에서 시간 값을 비교할 때, == 대신 .Equal() 메서드를 사용하면 위치와 시계 판독 차이를 설명하는 정밀하고 정확한 비교가 가능합니다.

위 내용은 Go에서 `==`를 사용하여 시간 값을 비교하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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