Порядок выполнения отличается от порядка кода - PullRequest
0 голосов
/ 27 июня 2018

Я выполняю этот фрагмент кода в 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. почему на выходе разного цвета (белого и красного) я использую goland IDE by jetbrain

Я не мог воспроизвести в https://play.golang.org/p/2T5LOt7FRDn Мой локальный env: windows 10 + go1.10.3 windows / amd64 + GoLand 2018.1.4

1 Ответ

0 голосов
/ 27 июня 2018

Во-первых, обратите внимание, что println() пишет в os.Stderr.

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

... и записывает результат в стандартную ошибку

Кажется, IDE Jetbrain покажет вам 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 будут чередоваться.

...