ホームページ  >  記事  >  バックエンド開発  >  Golang: タイマーが停止した後もチャネルからメッセージを受信するのはなぜですか

Golang: タイマーが停止した後もチャネルからメッセージを受信するのはなぜですか

PHPz
PHPz転載
2024-02-09 23:36:091171ブラウズ

Golang: タイマーが停止した後もチャネルからメッセージを受信するのはなぜですか

Golang: タイマーが停止した後もチャネルからメッセージを受信して​​いるのはなぜですか?これは、多くの Golang 開発者がタイマーを使用するときによく遭遇する問題です。タイマーは Golang で一般的に使用されるツールで、一定時間後に特定の操作を実行するために使用されます。ただし、タイマーを明示的に停止しても、チャネルからメッセージを受信して​​しまう場合があります。一体何が原因でこれが起こるのでしょうか?この記事では、PHP エディターの Zimo がこの質問に詳しく答え、対応する解決策を提供します。

質問内容

最初のコード(例外):

リーリー

2 番目のコード (通常):

リーリー

最初のコードが停止後もタイマー チャネルからメッセージを取得する理由がわかりません。タイマーが役に立たなくなるようなので、これは正常ではないと思います。

2 番目のコードは正常です。違いは、「var ti time.timer」と「var ti *time.timer」です。一方は値であり、もう一方はポインターです。

ポインターに詳しくないのですが、誰か助けてくれませんか?

###ありがとう!

回避策

銘柄記号を参照解除しているため、その値がコピーされます。

停止方法は次のとおりです:

リーリー

タイマーをコピーすると、

&t.r は別の場所を指します。だからこそタイマーは止まらないのです。

したがって、

time.ticker の代わりに *time.ticker を使用する必要があります。

以上がGolang: タイマーが停止した後もチャネルからメッセージを受信するのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。