Go: Как использовать именованные аргументы при вызове функции? - PullRequest
0 голосов
/ 23 сентября 2019

Как я могу вызвать функцию при использовании именованных аргументов?

(Если неясно, что такое именованные аргументы, вот пример их использования в Python )

Пример того, что я хотел бы сделать:

func Add(a int, b int) int {
  return a + b
}

func main() {
  c := Add(a: 1, b:3)
  return c
}

Тем не менее, выше сказанное дает мне ошибку:

unexpected :, expecting comma or )

(это относится к ':' сразу после 'a')

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Go не имеет именованных аргументов.Самое близкое, что я знаю в Go для именованных аргументов, - это использование структуры в качестве входных данных.Так что для вашего примера вы можете сделать -

type Input struct {
  A int
  B int
}

func Add(in Input) int {
  return in.A + in.B
}

func main() {
  c := Add(Input{A: 1, B: 3})
  return c
}
0 голосов
/ 24 сентября 2019

Вкратце: язык Go не поддерживает именованные аргументы, но IDE поддерживают (см. Ниже).

Я согласен, что именованные аргументы могут быть полезны в Go.Это может помочь избежать ошибок.Например, только вчера в моих тестах была обнаружена ошибка, в которой источник и адресат.параметры для копирования () (встроенная функция Go) были задом наперед.

Однако, вероятно, существуют сотни полезных языковых функций, которые Go может иметь.Мы стараемся не добавлять в язык ненужные функции, чтобы упростить задачу.После того, как вы использовали Go для большого проекта, вы по достоинству оцените, насколько простые вещи сравниваются с другими языками.(Я профессионально использовал более десятка языков, и Go на данный момент наименее раздражает.)

Но на самом деле вы можете назвать аргументы, если ваша IDE поддерживает это.Например, я использую GoLand, и когда вы вводите аргументы для функции, она показывает имя параметра (светло-серый) в строке с двоеточием перед значением.Это даже лучше, чем вы привыкли, так как вам даже не нужно вводить имя!

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