golang/go

cmd/vet: govet sometimes wrong about whether a context gets cancelled

オープン

#29,587 opened on 2019/01/06

 (11 件のコメント) (0 件のリアクション) (0 人の担当者)Go (19,008 件のフォーク)batch import
AnalysisNeedsInvestigationhelp wanted

Repository metrics

Stars
 (133,883 個のスター)
PR merge metrics
 (30d に merged PR はありません)

説明

What version of Go are you using (go version)?

Not sure, it's a toolchain. Most likely 1.11.

Does this issue reproduce with the latest release?

Yes, as of 1.12beta.

What operating system and processor architecture are you using (go env)?

No idea, govet runs remotely on a language server.

What did you do?

ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if true {
  // This makes govet think that the child context never gets cancelled,
  // when, in fact, it is cancelled by the parent's cancel().
  ctx, _ = context.WithTimeout(ctx, time.Second)
}

What did you expect to see?

govet should not claim that the child context leaks. (If it's a style question, it should be in the linter, not govet.)

What did you see instead?

govet incorrectly thinks the child context does not get cancelled.

コントリビューターガイド