Another way to look at it.

The Go Programming Language Specification
https://golang.org/ref/spec

For statements

For statements with for clause

ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .

Any element of the ForClause may be empty but the semicolons are required 
unless there is only a condition. 

If the condition is absent, it is equivalent to the boolean value true.

However, the compiler does not appear to apply the equivalency:

// no error
func ForLoop1() int {
    for i := 0; ; i++ {
        if i%123 == 0 {
            return 456
        }
    }
}

// error: missing return at end of function
func ForLoop2() int {
    for i := 0; true; i++ {
        if i%123 == 0 {
            return 456
        }
    }
}

https://play.golang.org/p/Q-hF7ZhL4Vf

Peter

On Thursday, March 4, 2021 at 8:36:07 PM UTC-5 Scott Pakin wrote:

> The Go compiler (I'm using go1.16 linux/amd64) correctly infers that 
> function with an infinite for { … } loop that conditionally returns a 
> value from within the loop does not also need to return a value at the end 
> of the function:
>
>    - https://play.golang.org/p/07ZjFx2uJlx
>
> However, changing that infinite loop to a three-clause for loop with true 
> as the continuation condition (e.g., for i := 0; true; i++ { … }) 
> complains about a missing return at end of function:
>
>    - https://play.golang.org/p/yf4ihkdBUXZ
>
> Shouldn't the compiler treat those two cases the same?
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/289daadd-b833-4b04-8d65-b20f8bfec191n%40googlegroups.com.

Reply via email to