dongqiao8421 2018-06-27 00:45
浏览 15
已采纳

执行顺序与代码顺序不同

I execute this code snippet in goland IDE but found the output order is NOTthe same as what I expected:

package main

import (
    "fmt"
    "errors"
)

func main() {

    println("===========================")
    println("---------------------------")
    r,_:= div(6,3)
    fmt.Println(r)
}

func div(x, y int) (int, error) {
    defer println("dispose...")
    if y == 0 {
        return 0, errors.New("division by zero")
    }
    return x / y, nil
}

output:

enter image description here

  1. why the out order is differ from code order
  2. why the output in different color(white & red), I use goland IDE by jetbrain

I could not reproduce in https://play.golang.org/p/2T5LOt7FRDn My Local env: windows 10 + go1.10.3 windows/amd64 + GoLand 2018.1.4

  • 写回答

1条回答 默认 最新

  • doudou6719 2018-06-27 02:20
    关注

    First, note that println() writes to os.Stderr.

    https://golang.org/pkg/builtin/#println

    ...and writes the result to standard error

    It seems Jetbrain's IDEs would show you Stderr lines at the end and in a different colour.

    This is a smaller program that would let you reproduce the same behaviour:

    package main
    
    import (
        "fmt"
        "os"
    )
    
    func main() {
        fmt.Fprintln(os.Stderr, "to stderr")
        fmt.Fprintln(os.Stdout, "to stdout")
    }
    

    You will see the output inverted, with the to stderr line shown in red.

    You cannot reproduce this outside the IDE cause then stderr and stdout ouput will be interleaved.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?