2

I am writing a function to reverse a string using Go.

func main() {
        s := "abcde"
        r := []rune(s)
        for i, j := 0, len(s)-1; i < j; i, j = i++, j-- {
               r[i], r[j] = r[j], r[i]
        }
    fmt.Printf("%s\n", string(r))
}

However, the compiler complaints about i, j = i++, j--, says, syntax error: unexpected ++, expecting {.

This function works if i change that into i, j = i+1, j-1. I don't know why this isn't allowed. Anyone can help? Thank u.

1 Answer 1

2

In Go, x-- and x++ are statements, not expressions, so you can't assign them like that, and it's by design.

The Spec says:

Unary operators have the highest precedence. As the ++ and -- operators form statements, not expressions, they fall outside the operator hierarchy. As a consequence, statement *p++ is the same as (*p)++.

Sign up to request clarification or add additional context in comments.

1 Comment

Furthermore, in languages where they are expressions, i = i++ is a bit pointless: "increment i, and store the pre-increment value in i"?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.