Go의 시간 비교
Go의 시간을 비교할 때는 시간대 및 단조로운 시계 판독과 관련된 잠재적인 뉘앙스를 고려하는 것이 중요합니다. 항등 연산자(==)는 시간 인스턴스뿐만 아니라 위치 및 단조 시계 판독값도 비교합니다.
이를 설명하기 위해 다음 코드를 고려하세요.
<code class="go">expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib) t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC) res := GenerateWIB(t1) if res != expect { fmt.Printf("WIB Expect %+v, but get %+v", expect, res) }</code>
이 시나리오에서 , res != Expect 비교는 res와 Expect로 표시되는 실제 시간이 동일하더라도 항상 true로 평가됩니다. 이는 벽 시간, 연장된 시간, 위치 및 단조 시계 판독값을 나타내는 Time 구조체의 내부 필드가 인스턴스마다 다르기 때문입니다.
시간을 올바르게 비교하려면 다음을 수행하는 것이 좋습니다. 내부 필드 간의 잠재적인 차이를 고려하고 보다 정확한 비교를 제공하는 res.Equal(expect) 메서드를 사용하세요. Equal 메서드에 대한 문서에는 다음과 같이 명시되어 있습니다.
"Go == 연산자는 시간 순간뿐만 아니라 위치 및 단조 시계 판독값도 비교합니다. 따라서 시간 값을 맵 또는 데이터베이스 키로 사용해서는 안 됩니다. UTC 또는 로컬 메서드를 사용하여 달성할 수 있는 모든 값에 대해 동일한 위치가 설정되었으며 t = t.Round(0)를 설정하여 단조 시계 판독값이 제거되었음을 먼저 보장하지 않습니다."
res.Equal(expect)를 사용하면 비교가 오직 시간 순간만을 기반으로 하고 위치나 단조로운 시계 읽기의 잠재적인 차이를 무시하도록 보장됩니다.
위 내용은 Go에서 시간을 정확하게 비교하는 방법: 언제 `==` 대신 `Equal()`을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!