I'm having trouble understanding something in the go spec for short variable (re)declarations. The spec says:
"redeclaration can only appear in a multi-variable short declaration. *Redeclaration does not introduce a new variable; it just assigns a new value to the original.*" It's that last sentence that I'm having problems squaring with observed behaviour. Example 1: https://go.dev/play/p/M43ilvI-hB9 package main import "fmt" func myfunc() (int, error) { return 123, nil } func main() { var code int if code, err := myfunc(); err != nil { // line 11 fmt.Printf("Error: %s", err) return } fmt.Printf("code is %d", code) } This gives a compile error: ./prog.go:11:5: declared and not used: code Adding a line to workaround this gives Example 2: https://go.dev/play/p/TVfTCc2bjAO func main() { var code int if code, err := myfunc(); err != nil { fmt.Printf("Error: %s", err) * _ = code* return } fmt.Printf("code is %d", code) } This prints 0, not 123. These examples seem to show that the variable "code" (re)declared in the if-statement is a completely new variable which is local to the if block only. (Aside: what I was actually trying to achieve is to tidy some program logic so that the "err" variable is local to the block - and hence can't accidentally be bound to later on in the function - whilst making the "code" value persist beyond the block where it can be used later) -- 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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/37978205-dafe-40e3-bf6d-f3f55aff7463n%40googlegroups.com.
