The evaluation order is defined here:
https://golang.org/ref/spec#Order_of_evaluation
The important part is that the order of evaluation in a return statement is
only defined for function calls, method calls and communication statements,
but not in relation to other operations. So, in
return intNumber, setInteger(&intNumber)
It is not defined whether `intNumber` or `setInteger(&intNumber)` is
evaluated first, as the former is none of those. I can't really tell you
why, but it has been discussed a couple of times, you might find something
using the search function on golang-nuts.

If you want reliable behavior, you should assign the result first
var intNumber Integer
err := setInteger(&intNumber)
return intNumber, err


On Mon, Sep 21, 2020 at 6:09 PM cs.ali...@gmail.com <cs.alikoyu...@gmail.com>
wrote:

> Why does the compiler change evaluation order of return when adding a new
> field to a struct?  I didn't check the compiler output, I only guess it
> somehow changes the order.
> play <https://play.golang.org/p/1_TBo98bRd6>
> package main
> import (
> "fmt"
> )
> type Number interface {
> Value() int
> }
> type Integer struct {
> value int
> additional int // remove this for different result
> }
> func (integer Integer) Value() int {
> return integer.value
> }
> func main() {
> number, _ := getNumber()
> fmt.Printf("number val: %d\n", number.Value())
> }
> func getNumber() (Number, error) {
> var intNumber Integer
> return intNumber, setInteger(&intNumber)
> }
> func setInteger(num *Integer) error {
> num.value = 2
> return nil
> }
>
> --
> 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/b7077f03-b0f4-454a-a587-ab9757164409n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/b7077f03-b0f4-454a-a587-ab9757164409n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAEkBMfHsSFfjPzoOTVz7Q4fE%3DziCXhA5mbUWzSkQ5DADMyzWFw%40mail.gmail.com.

Reply via email to