Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

proposal: Go 2: extend "continue" to jump to start of function #34144

Closed
jfcg opened this issue Sep 6, 2019 · 5 comments
Closed

proposal: Go 2: extend "continue" to jump to start of function #34144

jfcg opened this issue Sep 6, 2019 · 5 comments

Comments

@jfcg
Copy link

@jfcg jfcg commented Sep 6, 2019

continue statement begins the next iteration of the innermost "for" loop at its post statement. The "for" loop must be within the same function. If there is a label, it must be that of an enclosing "for" statement, and that is the one whose execution advances.

In addition to the above officially specified definition of continue keyword, I am proposing to extend its definition to also include the containing function body as the outer-most layer. That means:

  • "continue" goes to the start of the containing function if there is no enclosing for loop
  • "continue functionName" goes to the start of the containing function

I occasionally find myself using for {} or labels/gotos for an entire function, so I thought this would be a harmless and useful addition to Go. What do you think?

Note: When examining this, I realized we can create labels inside functions with the same name. So you can have a label main: inside main(). So I think it would be better to forbid such label names inside a function if this proposal is accepted.

Note 2: Since we have return, we don't need to change anything about "break".

@gopherbot gopherbot added this to the Proposal milestone Sep 6, 2019
@gopherbot gopherbot added the Proposal label Sep 6, 2019
@ianlancetaylor ianlancetaylor changed the title Proposal: Go 2: extend "continue" to jump to start of function proposal: Go 2: extend "continue" to jump to start of function Sep 6, 2019
@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

@ianlancetaylor ianlancetaylor commented Sep 6, 2019

Within a loop, continue has a vaguely sensible meaning: continue with the next iteration of the loop. I can't see any way that continue implies that we should jump to start of the current function. A function is not a loop.

It also doesn't seem like something that comes up all that often. In https://blog.golang.org/go2-here-we-come Robert outlined three criteria for language changes. I'm not sure this meets criteria 1: address an important issue for many people.

@beoran

This comment has been minimized.

Copy link

@beoran beoran commented Sep 10, 2019

As you noted, this can already be done using goto and a label. However, I would say that it's better in most cases to refactor the function and split the loop body into a separate function, that returns whether or not a continue is needed as a boolean.

@mdaliyan

This comment has been minimized.

Copy link

@mdaliyan mdaliyan commented Oct 1, 2019

"continue functionName" makes no sense. What you say is some kind of "repeat functionName" that makes no sense either. You can just run your function recursively or use labels.

@bradfitz

This comment has been minimized.

Copy link
Member

@bradfitz bradfitz commented Oct 22, 2019

This doesn't seem to have much, if any, support, so this looks like it'll be a likely decline.

Leaving open for four more weeks for final comments, though.

@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

@ianlancetaylor ianlancetaylor commented Nov 19, 2019

No final comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants
You can’t perform that action at this time.