Description
Proposal Summary
Deprecate time.Tick(d)
in favour of time.NewTicker(d)
. It's a very special case, where the ticker never stops and the channel cannot be recovered by the garbage collector. The name time.Tick() does not reflect it and if you really want that same functionality, it's just time.NewTicker(d).C
, with the exception when d <= 0
.
Would you consider yourself a novice, intermediate, or experienced Go programmer?
Intermediate
What other languages do you have experience with?
Comfortable with C, Python, JavaScript, PHP, C#, Lua.
Would this change make Go easier or harder to learn, and why?
Easier, by applying the principle of least astonishment. We can see that this function is already abused in some public repositories.
Has this idea, or one like it, been proposed before?
To my knowledge, no.
Who does this proposal help, and why?
The newcomers to Go as it will decrease ambiguity. We can see that there were issues in the past (#11662, #17757) and you can find public repositories (in GitHub, for instance), where this function is used improperly.
What is the proposed change?
Mark the function time.Tick()
as deprecated in the standard library documentation and remove it in a later version. It won't introduce changes to the language specification.
Is this change backward compatible?
It is breaking the Go 1 compatibility guarantee. Thus, this proposal is labeled Go2.
Show example code before and after the change.
Before
for t := range time.Tick(d) {
// loop body
}
After
for t := range time.NewTicker(d).C {
// loop body
}
What is the cost of this proposal?
It probably breaks more than a few packages and binaries, which use that function. No compile time or runtime cost.
I've based the proposal on the language change template, but I have removed the last few points I found to be irrelevant.