Как работает возврат в этом туре го примера? - PullRequest
0 голосов
/ 29 ноября 2018

это моя первая неделя обучения Го.Я проверяю Tour of Go и в коде https://tour.golang.org/flowcontrol/5 Я не понимаю, как return работает внутри функции sqrt ().

func sqrt(x float64) string {
    if x < 0 {
        return sqrt(-x) + "i"
    }
    return fmt.Sprint(math.Sqrt(x))
}

Я понимаю код с предложением else вродеэтот

func sqrt(x float64) string {
            if x < 0 {
                return sqrt(-x) + "i"
            }else{
            return fmt.Sprint(math.Sqrt(x))}
        }

этот код выполняется без проблем, но нехватка в VsCode предлагает мне отказаться от предложения else.return sqrt(-x) + "i" внутри if завершает выполнение функции или как она работает?Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Это предупреждение, сообщаемое Go Linter.Код внизу действителен.

func sqrt(x float64) string {
    if x < 0 {
        return sqrt(-x) + "i"
    }

    return fmt.Sprint(math.Sqrt(x))
}

Этот код ниже также действителен, но выдает некоторое предупреждение.

func sqrt(x float64) string {
    if x < 0 {
        return sqrt(-x) + "i"
    } else {
        return fmt.Sprint(math.Sqrt(x))
    }
}

В основном, если есть оператор if и тело содержит return оператор, лучше не использовать else блок.

0 голосов
/ 29 ноября 2018

Спецификация языка программирования Go

Операторы возврата

Оператор "return" в функции F завершает выполнениеF и, необязательно, предоставляет одно или несколько значений результата.Любые функции, отложенные на F, выполняются до того, как F вернется к своему вызывающему.


Спецификация определяет язык.return завершает функцию.


Комментарии к обзору кода Go

Поток ошибки отступа

Постарайтесь сохранить нормальный путь к коду с минимальным отступом и сделайте отступ обработки ошибок, разбираясь с ним в первую очередь.Это улучшает читабельность кода, позволяя быстро визуально сканировать нормальный путь.Например, не пишите:

if err != nil {
  // error handling
} else {
  // normal code
}

Вместо этого пишите:

if err != nil {
  // error handling
  return // or continue, etc.
}
// normal code

Хотя любой из них будет работать, из соображений стиля, удалите ненужныеelse и отступ.Это похоже на отступ потока ошибок.

0 голосов
/ 29 ноября 2018

Как и в большинстве (если не во всех?) Первом операторе возврата, который ударил компилятор, выйдет из функции и не продолжит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...