【发布时间】:2020-10-05 09:35:10
【问题描述】:
尝试将gonnel 用于某些隧道。试图打开 2 个隧道,然后当它们关闭时,我注意到日志包说试图关闭同一个隧道两次。通过查看代码,似乎(其中一个)问题是:
我想我会利用 staticcheck、golangci-lint 甚至去 vet 让它突出这个问题,这样我就可以更有信心解决这个问题。但是,当我运行这些工具时,我会得到以下输出:
去看兽医:
静态检查:
还尝试使用 -loopclosure 运行 go vet,但我仍然没有得到任何输出。难道其中一个工具不应该说 go func 需要将迭代器变量作为参数传递吗?如果有帮助,我正在运行 go 1.14.3 darwin/amd64,并且还尝试在 goland 中导入代码,但我没有收到该代码段的检查警告。我感觉我可能做错了什么,你能看出是什么吗?
谢谢!
【问题讨论】:
-
忽略 linter 警告,一个问题可能是
c.Tunnel包含重复项。我注意到AddTunnel不检查重复插入。如果有重复,t.IsCreated上可能会有比赛。由于CloseTunnel和DisconnectAll不以线程安全的方式使用t.IsCreated,因此如果两次在c.Tunnel中,则可能会为同一隧道生成两个闭包goroutine。 -
你使用的是什么版本的 Go(和 linter)?一些较旧的警告没有。
-
使用
go 1.14.3、staticcheck 2020.1.4和golangci-lint has version 1.27.0 built from fb74c2e on 2020-05-13T18:45:55Z -
Shouldn't one of the tools say that the go func needs the iterator variable passed as param?这是基于意见的,您应该与库作者讨论。
标签: go static-analysis lint linter