Closed lesismal closed 1 year ago
dev分支我已经格式化好import并提交了. golint还是算了吧, 检查得太细容易误报, 虽然for里面可以省略一个参数但是我习惯加个下划线, 省略的话我会疑惑args是key还是value.
golint还是算了吧, 检查得太细容易误报
但这样你可能会错过真正的报错。误报肯定是因为我们自己写的测试用例有问题,比如某个模拟测试就是应该返回err,那就应该判断err不为nil或者必须为指定的err才算成功
而且不只是test文件,确实还有一些其他的可以更规范的,这种对实际运行都没什么影响,但如果能更简洁点更好,比如:
虽然for里面可以省略一个参数但是我习惯加个下划线, 省略的话我会疑惑args是key还是value
顺序是先key后value,如果只写一个那肯定是第一个参数key
搞lint确实很烦,但至少nbio里确实给我提示了很多次真正的问题。虽然烦,但其实主要是搞这一轮,一轮搞定,以后就不怎么需要再改,每次提交自动跑就省心了
OK, 晚点我去合并
golangci-lint 一大堆误报 😂
你用的什么版本golangci-lint,我这没这种undefined的误报。
couldn't import unicode/utf8 这种 import 我好像只在有种情况下遇到过类似的:在go mod的对应的带版本号的源码目录里,比如 gopath/pkg/mod/github.com/lesismal/nbio@v1.3.12 我直接在这里面修改代码,因为mod已经自己管理了版本对应的文件依赖相关信息,这时候如果import新的就会报这种错,其他时候还没遇到过import标准库都有问题的
会不会是你用的版本问题
golangci-lint has version 1.52.2 built with go1.20.2 from da04413 on 2023-03-23T16:18:48Z
用 brew
装的
奇怪了,我的也是这个版本,但是你是mac我是linux
golangci-lint has version 1.52.2 built with go1.20.2 from da04413a on 2023-03-25T18:11:28Z
我这里就没你那些奇怪的误报:
client_test.go:14:11: Error return value is not checked (errcheck)
NewClient(new(BuiltinEventHandler), nil)
^
client_test.go:20:12: Error return value is not checked (errcheck)
NewClient(new(BuiltinEventHandler), option)
^
client_test.go:28:12: Error return value is not checked (errcheck)
NewClient(new(BuiltinEventHandler), option)
^
client_test.go:69:12: Error return value of `srv.Read` is not checked (errcheck)
srv.Read(buf)
^
client_test.go:70:13: Error return value of `srv.Write` is not checked (errcheck)
srv.Write([]byte(text))
^
client_test.go:103:13: Error return value of `srv.Read` is not checked (errcheck)
srv.Read(buf)
^
client_test.go:104:14: Error return value of `srv.Write` is not checked (errcheck)
srv.Write([]byte(text))
^
client_test.go:131:13: Error return value of `srv.Read` is not checked (errcheck)
srv.Read(buf)
^
client_test.go:132:14: Error return value of `srv.Write` is not checked (errcheck)
srv.Write([]byte(text))
^
reader_test.go:44:20: Error return value of `client.WriteAsync` is not checked (errcheck)
client.WriteAsync(OpcodeText, message)
^
reader_test.go:150:21: Error return value of `server.WriteAsync` is not checked (errcheck)
server.WriteAsync(Opcode(item.Opcode), testCloneBytes(payload))
^
task_test.go:65:21: Error return value of `server.WriteAsync` is not checked (errcheck)
server.WriteAsync(OpcodeText, message)
^
task_test.go:97:22: Error return value of `server.WriteAsync` is not checked (errcheck)
server.WriteAsync(OpcodeText, message)
^
task_test.go:136:20: Error return value of `socket.WritePong` is not checked (errcheck)
socket.WritePong(nil)
^
task_test.go:152:19: Error return value of `client.WritePing` is not checked (errcheck)
client.WritePing(nil)
^
task_test.go:153:21: Error return value of `client.WriteString` is not checked (errcheck)
client.WriteString("hello")
^
task_test.go:158:33: Error return value of `client.conn.Write` is not checked (errcheck)
go func() { client.conn.Write(fh[:n]) }()
^
task_test.go:193:22: Error return value of `server.WriteMessage` is not checked (errcheck)
server.WriteMessage(OpcodeText, message)
^
task_test.go:214:9: Error return value of `q.Push` is not checked (errcheck)
q.Push(func() {
^
task_test.go:255:21: Error return value of `wsConn.WriteAsync` is not checked (errcheck)
wsConn.WriteAsync(OpcodeBinary, []byte{0})
^
upgrader_test.go:225:16: Error return value of `server.Run` is not checked (errcheck)
go server.Run(addr)
^
upgrader_test.go:235:19: Error return value of `server.RunTLS` is not checked (errcheck)
go server.RunTLS(addr, "", "")
^
upgrader_test.go:246:16: Error return value of `server.Run` is not checked (errcheck)
go server.Run(addr)
^
upgrader_test.go:250:15: Error return value of `client.Write` is not checked (errcheck)
client.Write([]byte(payload))
^
upgrader_test.go:262:16: Error return value of `server.Run` is not checked (errcheck)
go server.Run(addr)
^
upgrader_test.go:266:15: Error return value of `client.Write` is not checked (errcheck)
client.Write([]byte(payload))
^
websocket_test.go:74:11: Error return value of `fw.Write` is not checked (errcheck)
fw.Write(s)
^
websocket_test.go:84:10: Error return value of `fw.Write` is not checked (errcheck)
fw.Write(s)
^
websocket_test.go:93:28: Error return value of `(compress/flate.Resetter).Reset` is not checked (errcheck)
fr.(flate.Resetter).Reset(r, nil)
^
websocket_test.go:95:10: Error return value of `io.Copy` is not checked (errcheck)
io.Copy(result, fr)
^
websocket_test.go:138:20: Error return value of `socket.SetDeadline` is not checked (errcheck)
socket.SetDeadline(time.Time{})
^
websocket_test.go:139:24: Error return value of `socket.SetReadDeadline` is not checked (errcheck)
socket.SetReadDeadline(time.Time{})
^
websocket_test.go:140:25: Error return value of `socket.SetWriteDeadline` is not checked (errcheck)
socket.SetWriteDeadline(time.Time{})
^
writer_test.go:138:21: Error return value of `server.WriteMessage` is not checked (errcheck)
server.WriteMessage(OpcodeText, nil)
^
writer_test.go:139:21: Error return value of `server.WriteMessage` is not checked (errcheck)
server.WriteMessage(OpcodeText, []byte("hello"))
^
writer_test.go:163:18: Error return value of `json.Unmarshal` is not checked (errcheck)
json.Unmarshal(message.Bytes(), m)
^
writer_test.go:180:19: Error return value of `client.WriteAny` is not checked (errcheck)
client.WriteAny(JsonCodec, OpcodeText, m)
^
writer_test.go:200:18: Error return value of `json.Unmarshal` is not checked (errcheck)
json.Unmarshal(message.Bytes(), m)
^
writer_test.go:217:19: Error return value of `client.WriteAny` is not checked (errcheck)
client.WriteAny(JsonCodec, OpcodeText, m)
^
websocket_test.go:27:27: func `(*webSocketMocker).reset` is unused (unused)
func (c *webSocketMocker) reset(socket *Conn, reader *bytes.Buffer, writer *bytes.Buffer) {
^
reader.go:59:13: S1028: should use fmt.Errorf(...) instead of errors.New(fmt.Sprintf(...)) (gosimple)
var err = errors.New(fmt.Sprintf("unexpected opcode: %d", opcode))
^
compress.go:97:9: S1005: unnecessary assignment to the blank identifier (gosimple)
for i, _ := range c.decompressors {
^
session_storage.go:125:9: S1005: unnecessary assignment to the blank identifier (gosimple)
for i, _ := range cm.buckets {
^
updrader.go:52:9: S1005: unnecessary assignment to the blank identifier (gosimple)
for k, _ := range responseHeader {
^
session_storage.go:124:83: S1019: should use make([]*bucket[K, V], segments) instead (gosimple)
var cm = &ConcurrentMap[K, V]{segments: segments, buckets: make([]*bucket[K, V], segments, segments)}
^
internal/random.go:31:23: S1019: should use make([]byte, n) instead (gosimple)
var b = make([]byte, n, n)
^
internal/utils_test.go:149:26: S1019: should use make([]byte, 4) instead (gosimple)
var key = make([]byte, 4, 4)
^
websocket_test.go:153:2: S1023: redundant `return` statement (gosimple)
return
^
internal/utils.go:68:35: unsafeptr: possible misuse of reflect.SliceHeader (govet)
return *(*[]byte)(unsafe.Pointer(&bh))
^
client.go:49:6: ineffectual assignment to host (ineffassign)
var host = ""
^
conn.go:133:6: ineffectual assignment to realCode (ineffassign)
var realCode = internal.CloseNormalClosure.Uint16()
^
protocol.go:151:6: ineffectual assignment to payloadLength (ineffassign)
var payloadLength = 0
^
internal/utils.go:187:9: SA6005: should use strings.EqualFold instead (staticcheck)
return strings.ToLower(a) == strings.ToLower(b)
autobahn这个action是可以了: https://github.com/lxzan/gws/actions/runs/4900030304/jobs/8750397895
刚好弄gws这个也发现nbio那个也是没有输出报告,但是因为没有error所以action里的执行状态竟然是成功的。。。 刚好整理了这一波回头我把nbio的autobahn也更新下
lint那个告警比较多,太琐碎了,我就不去挨个改了,等你有空了看看要不要改,多数是返回值没有校验的问题,比如 WriteAsync(...),
_ = WriteAsync(...)
这种忽略返回值应该就可以了,但是这不严谨,本来就是应该校验的,昨天我没细看test失败原因,现在想起来、可能就是因为昨天我修复这些lint时加了不少这种返回值err判断、不为nil时就Fatal/panic了所以test没有通过。 你早点研究下看看哪个goland插件好用,我用vscode这种代码规范直接就有提示的,比如这种可以把_
省掉: