>백엔드 개발 >Golang >Golang: 타이머가 멈춘 후에도 채널에서 계속 메시지를 받는 이유는 무엇입니까?

Golang: 타이머가 멈춘 후에도 채널에서 계속 메시지를 받는 이유는 무엇입니까?

PHPz
PHPz앞으로
2024-02-09 23:36:091205검색

Golang: 타이머가 멈춘 후에도 채널에서 계속 메시지를 받는 이유는 무엇입니까?

Golang: 타이머가 멈춘 후에도 채널에서 메시지를 계속 받는 이유는 무엇인가요? 이는 많은 Golang 개발자가 타이머를 사용할 때 자주 겪는 문제입니다. 타이머는 Golang에서 일반적으로 사용되는 도구로, 일정 시간이 지난 후 특정 작업을 수행하는 데 사용됩니다. 그러나 타이머를 명시적으로 중지하더라도 채널에서 계속 메시지를 받는 경우가 있습니다. 이런 일이 발생하는 원인은 정확히 무엇입니까? 이 기사에서는 PHP 편집자 Zimo가 이 질문에 대해 자세히 답변하고 그에 맞는 솔루션을 제공할 것입니다.

질문 내용

첫 번째 코드(예외):

으아악

두 번째 코드(일반):

으아악

첫 번째 코드가 중지된 후에도 여전히 타이머 채널에서 메시지를 받는 이유를 이해할 수 없습니다. 타이머를 쓸모 없게 만드는 것처럼 보이기 때문에 이것이 정상이 아니라고 생각합니다.

두 번째 코드는 정상입니다. 차이점은 "var ti time.timer"와 "var ti *time.timer"입니다. 하나는 값이고 다른 하나는 포인터입니다.

저는 포인터에 익숙하지 않습니다. 누구든지 도와주실 수 있나요?

감사합니다!

해결 방법

티커를 역참조하고 해당 값이 복사됩니다.

중지하는 방법은 다음과 같습니다.

으아악

타이머를 복사하면 &t.r다른 곳을 가리킵니다. 이것이 바로 타이머가 멈추지 않는 이유입니다.

그래서 *time.ticker 而不是 time.ticker를 사용해야 합니다.

위 내용은 Golang: 타이머가 멈춘 후에도 채널에서 계속 메시지를 받는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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