执行顺序与代码顺序不同

时间:2018-06-27 00:45:01

标签: go goland

我在goland IDE中执行了此代码段,但是发现输出顺序与我期望的不同:

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
}

输出:

enter image description here

  1. 为什么出库顺序与代码顺序不同
  2. 为什么输出的颜色不同(白色和红色),我使用jetbrain的goland IDE

我无法在https://play.golang.org/p/2T5LOt7FRDn中复制 我的本地环境:Windows 10 + go1.10.3 Windows / amd64 + GoLand 2018.1.4

1 个答案:

答案 0 :(得分:8)

首先,请注意println()写入os.Stderr

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

  

...并将结果写入标准错误

Jetbrain的IDE似乎以不同的颜色在结尾显示Stderr行。

这是一个较小的程序,可让您重现相同的行为:

package main

import (
    "fmt"
    "os"
)

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

您将看到输出反转,to stderr行以红色显示。

您无法在IDE外部重现此内容,因为这样会混淆stderr和stdout输出。