Подтвердить что ты не робот

Константный параметр в функции golang

Я новичок в голанге. Можно ли пометить параметр как постоянный в функции? Так что параметр не изменяется случайно.

4b9b3361

Ответ 1

Нет, в настоящее время это невозможно. Различают несколько случаев:

  • При передаче параметра "обычно", то есть по значению, вам не нужно беспокоиться об изменении его, так как эти параметры ведут себя как локальные переменные, поэтому вы можете изменять их внутри функции, но ваши изменения не будут видимый вне функции. Но есть исключение из этого правила...
  • ... некоторые типы Go (например, указатели, фрагменты, каналы, карты) являются ссылочными типами, что означает, что изменения в них будут видны вне функции. Некоторые подробности даны здесь.
  • Вы можете передавать указатели (например, в структуры) в качестве параметров, и в этом случае изменения будут видны вне функции. Если это не предназначено, в настоящее время вы ничего не можете с этим поделать. Поэтому, если вы пропустите указатели, чтобы избежать копирования больших структур, лучше использовать это экономно - помните: "Преждевременная оптимизация - это корень всего зла". Некоторые подсказки приведены в разделе "Вопросы и ответы" здесь (это относится к приемникам методов, но также относится к параметрам).

Ответ 2

Нет.

Вы можете объявить константу внутри тела функции, но не как параметр.

В Go константы создаются во время компиляции и никогда не могут меняться, а функциональные параметры должны меняться с каждым вызовом во время выполнения.

Ответ 3

По-прежнему есть удобное приложение для параметра const, переданного по значению: вы не можете непреднамеренно изменить начальное значение.

Рассмотрим следующий код:

func Generate(count int) (value []byte) {
   value = make([]byte, count)
   for i:=0; i<count; count++ {
       value[i] = byte(i) // just for an example
   }
   return
}

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