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.