Есть ли в go аналог cv-qualifier в параметрах функции?
Есть ли в го возможность передать в функцию указатель на объект, но при этом запретить функции его изменять?
Также можно ли запретить методу изменять поля структуры?
Что на плюсах делается с помощью
bool is_negative(int const & ptr) {
return (ptr < 0) ? true : false;
}
и
int SomeClass::get_value() const {...}
соответственно.
(Понятно что в примере 1 это смысла не имеет, но на месте int'а мог быть какой-нибудь большой класс, объекты которого копировать не хочется.)
Ответы (1 шт):
Нет. Это одна из возможностей, которые авторы языка намеренно пропустили при его создании. Из FAQ:
Every language contains novel features and omits someone's favorite feature. Go was designed with an eye on felicity of programming, speed of compilation, orthogonality of concepts, and the need to support features such as concurrency and garbage collection. Your favorite feature may be missing because it doesn't fit, because it affects compilation speed or clarity of design, or because it would make the fundamental system model too difficult.
If it bothers you that Go is missing feature X, please forgive us and investigate the features that Go does have. You might find that they compensate in interesting ways for the lack of X.
Конкретно решение об отсутствии неизменяемых значений всегда было одним
из спорных элементов дизайна, и на Гитхабе до сих пор много предложений
добавить их в язык. (const, который сейчас есть
в Go, это про константы времени компиляции, а не про неизменяемые
значения; разница есть.)
Интересно, что в диалекте языка C, который Роб Пайк сотоварищи использовали в ОС Plan 9 From Bell Labs, ключевое слово const тоже ничего не делало и по сути игнорировалось.