>백엔드 개발 >Golang >페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트

페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트

WBOY
WBOY앞으로
2024-02-14 10:42:081001검색

페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트

데이터베이스 쿼리를 수행할 때 페이징 쿼리를 자주 접하게 됩니다. 그러나 페이지를 매긴 쿼리가 취소되면 타이밍이 부정확해지는 경우가 있습니다. 이 문제는 정확한 타이밍이 필요한 애플리케이션에 매우 중요합니다. 이 기사에서는 PHP 편집자 Baicao가 타이밍의 정확성과 정확성을 보장하기 위해 이 문제를 처리하는 방법을 소개합니다. 이 문제를 더 잘 이해하고 처리하는 데 도움이 되는 몇 가지 가능한 원인과 해결 방법을 살펴보겠습니다.

질문 내용

쿼리를 비동기적으로 실행할 수 있는 페이지가 매겨진 SQL 쿼리를 수행하기 위한 개체가 있습니다.

으아아아

이 코드, 특히 취소 부분을 테스트하려고 합니다. 내 테스트 코드는 다음과 같습니다:

으아아아

내가 겪고 있는 문제는 cancel()이 호출될 때 switch 문 - ctx.done 또는 . 결과를 <code>results 채널로 보낼 때까지 루프 내 어디에서나 실행이 발생할 수 있습니다. 하지만 cancel() 을 호출할 때까지는 results 채널에서 데이터를 수신할 때까지 실행이 차단되어야 하기 때문에 이는 말이 되지 않습니다. 또한 저는 SQL 테스트를 위해 SQL 쿼리에 대한 어떤 종류의 퍼징도 허용하지 않는 sqlmock 패키지를 사용합니다. 이 결함이 발생하는 이유는 무엇이며 어떻게 해결합니까? cancel() 时,不能保证在我检查 switch 语句处执行 - ctx.done 或 。执行可以在循环中的任何位置进行,直到我将结果发送到 <code>results 通道。但这没有意义,因为执行应该阻塞,直到我从 results 通道接收到数据,直到我调用 cancel() 后我才会这样做。此外,我依靠 sqlmock 包进行 sql 测试,它不允许对 sql 查询进行任何类型的模糊检查。为什么我会遇到此故障以及如何修复它?

解决方法

我的问题是由于我自己对 go 通道缺乏了解而导致的。我认为,通过创建 chan([]*t, 1) 意味着通道在满时(即当它包含单个项目时)会阻塞,但事实并非如此。相反,当我尝试在缓冲区已满时发送到通道时,会发生阻塞。因此,通过像这样修改 results

Solution

내 문제는 내 바둑 채널에 대한 이해 부족으로 인해 발생했습니다. 나는 chan([]*t, 1) 을 생성함으로써 채널이 꽉 찼을 때(즉, 단일 항목을 포함할 때) 차단된다는 것을 의미한다고 생각했지만, 그렇지 않습니다. 대신 버퍼가 꽉 찼을 때 해당 채널로 전송하려고 하면 차단이 발생합니다. 따라서 결과를 다음과 같이 수정하면 됩니다: 🎜 으아아아 🎜포함된 데이터가 수신될 때까지 채널이 차단되는지 확인할 수 있습니다. 이 변경으로 인해 테스트와 관련된 모든 문제가 해결되었습니다. 🎜

위 내용은 페이지를 매긴 쿼리를 취소할 때 부정확한 타이밍을 처리하기 위한 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제