-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
In basically all of my modules, I support the two latest major Go versions - right now, this means 1.16 and 1.17.
I develop on Go master, for the sake of helping with testing and developing new features.
In one of the codebases that must still support Go 1.16, I got the following warning from staticcheck:
$ staticcheck ./...
cmd/shfmt/json.go:27:7: reflect.Ptr is deprecated: use the new spelling, Pointer. (SA1019)
syntax/walk.go:269:7: reflect.Ptr is deprecated: use the new spelling, Pointer. (SA1019)
Staticcheck is right: the type is marked as deprecated.
Unfortunately for me, this is a warning that will be bothering me for six to twelve months before I can fix it.
reflect.Pointer
won't appear until Go 1.18, and I won't drop support for 1.17 until 1.19 comes out.
I think the standard library needs to at least wait one major release before formally deprecating APIs.
That is, the earliest we could deprecate reflect.Ptr
would be in Go 1.19, when the majority of module authors can stop worrying about Go 1.17 and older.
Alternatively, to be extra conservative towards module authors who move slowly, we could make the general rule to wait two major releases.
I thought this rule was already common knowledge, as https://go-review.googlesource.com/c/go/+/284777/ was rejected for deprecating io/ioutil
too early.
We seem to have dealt with the reflect API changes differently, though.
Perhaps this means we should write down this general standard library deprecation rule?
Marking as NeedsDecision for 1.18, as making a decision after 1.18 would be a bit late :)