𝗠𝗮𝗿𝘂𝗳
Всем Салют! Установил go на другой ноут.
В vscode при установке 10 расширений выпадает ошибка
пожалуйста, помогите решить, хз в чем проблема
Roman
Artem
там не написано
Zver
Artem
там написано мол ой а вдруг понадобится тогда придется юзать мутабельное
𝗠𝗮𝗿𝘂𝗳
𝗠𝗮𝗿𝘂𝗳
Artem
Viktor
𝗠𝗮𝗿𝘂𝗳
так установлен
Roman
В скольки процентах операций потребуется что-то сложнее этого: const a = []int{1,2,3}?
если лень читать:
если иммутабельность сильно ограничивает - её выбросят. Чем полезна такая концепция иммутабельности, которая работает только в простых случаях а в более сложных - неприменима?
это, знаешь... как если ребёнку поставить вспомогающие колёсики на велосипед чтоб он катался по двору, а когда он поедет на этом велике с горки - убрать колёсики (не лучший пример, но спотанно в голову пришло только это)
щит нужен тогда, когда в тебя 50м калибром херачат, а не тогда, когда на тебя нападают тупым ножом))
Artem
по мне так более выгодно было бы сделать как в скале. либо все мутабельное либо нет. Дабы избежать вот такой двоякости
Zver
Artem
val и var
$continue$
Можно ли на Go писать addon для browser
Aleksandr
Viktor
Roman
Aleksandr
в чем ограничивает? изменить часть структуры, помеченной const?
Daniel
а в простых ситуациях люди выбросят иммутабельность, которую не понимают
Daniel
простые - это примерно 99% всех ситуаций
Aleksandr
если я пометил структуру const, я хочу чтобы она не менялась. не корень, не элемент слайса, не вложенная мапа в мапу
Aleksandr
$continue$
Я на c++ писал
Daniel
можно и на го - и скомпилять в js
Viktor
https://github.com/gopherjs/gopherjs
Zver
Может тогда надо const [][] mut *T
Чтобы const задавала глобаную константность переменной, а если надо, то можно вложенные структуры сделать мутабельными.
Roman
Artem
так и предалагают же
Artem
не?
Daniel
не
Daniel
но это безумие, коллеги
Daniel
с++ как он есть
Artem
Zver
И всем удобно. Хотя выглядит странновато.
Daniel
почти любая конструкция имеет смысл, вот только почти никто не знает уверенно, какой
Artem
по дефолту всее иммутабельное, но на нужный тип можешь добавить мутабельность
Zver
Roman
с++ как он есть
да нихера это не C++. Это называется "надёжное, чёткое описание намерений", а мы на Go только CLI тулзы пишем? да нет, мы на нём целые кубернетисы валяем
Daniel
как скажешь...
Roman
Darwin
Artem
Aleksandr
Роман, необязательно новая фича должна покрывать все кейсы - в данном случае это приводит к усложнению и высокому порогу понимания фичи.
Можно компромиссно упростить фичу и выкинуть 5% редких кейсов. Дефолтная иммутабельность всей структуры с одним const - это по-моему единственный вариант, жизнеспособный для внедрения в го
Aleksandr
пиши новый пропозал, без шуток
Aleksandr
не трать мое время
doc
Пиши на расте, без шуток
𝗠𝗮𝗿𝘂𝗳
Zver
𝗠𝗮𝗿𝘂𝗳
да
𝗠𝗮𝗿𝘂𝗳
покапался в переменных средах, вроде все норм
Zver
@Marsaidoff А не может ли быть из-за пробела в пути ....
𝗠𝗮𝗿𝘂𝗳
хммм
Roman
Может тогда надо const [][] mut *T
Чтобы const задавала глобаную константность переменной, а если надо, то можно вложенные структуры сделать мутабельными.
DISCLAIMER:
WARNING! THE FOLLOWING CODE IS FOR TESTING PURPOSES ONLY!
НИКТО НЕ БУДЕТ ТАК ПИСАТЬ КОД, ЭТО ПРОВЕРКА ТЕОРИИ НА ПРАКТИКЕ
ПОЖАЛУЙСТА БЕЗ "аа, как сложно, это не Go"!
немного абсурдно сложного кода (писать так не рекомендую никому, никогда):
map [* T1] [] [] * [] * T2
"map of pointers to T1 to slices of slices of pointers to slices of pointers to T2"
первый мут делает все последующие типы мутабельными
mut map [* T1] [] [] * [] * T2
ибо в ином случае пришлось бы писать
mut map [mut * mut T1] mut [] mut [] mut * mut [] mut * mut T2
иммут в ключе делает T1 иммутабельным, но после него мутабельность продолжается, поскольку ] терминирует mut и не даёт ему дальше "течь"
mut map [* immut T1] [] [] * [] * T2
однако immut может заменять мут:
mut map [* immut T1] immut [] [] * [] * T2
но вернуть mut тоже можно:
mut map [* immut T1] immut [] mut [] * [] * T2
и под конец можно сделать T2 иммут:
mut map [* immut T1] immut [] mut [] * [] * immut T2
если убрать первый mut тогда всё то первого immut'а вне суб-контекстах (map key) будет immut:
map [* immut T1] immut [] mut [] * [] * immut T2
и линтер может предложить убрать лишний immut:
map [* immut T1] [] mut [] * [] * immut T2
Artem
Ехал mut через immut
Видит mut immut в mut mut
Сунул mut в immut immut
Mut immut immut mut mut
Roman
Vladimir
Народ, а что вы спорите о непринятом пропозале в телеграмм канале?
Daniel
Daniel
и спорим мы с его автором
Vladimir
А
Roman
Andrei 🦉
есть следующий вопрос по goswagger:
можно ли как то малой кровью встроить ручку с UI для спеки в сгенерированный по этой спеке сервер, типа swagger serve встроить в swagger generate server?
aadz
О! William Kennedy написал в The latest Golang development news про An Immutability Proposal for Go
.
aadz
Ссылку пожалуйста
William Kennedy
An Immutability Proposal for Go
( https://github.com/romshark/Go-1-2-Proposal---Immutability ) — An
extensive document with a proposal for adding immutable types to
Go, not only to a theoretical Go 2, but in a backwards-compatible
way to Go 1.x too. If you want to see some quick examples, check
out the FAQ.
( https://github.com/romshark/Go-1-2-Proposal---Immutability#4-faq )
aadz
https://golangweekly.com/issues/231
aadz
А! Это не William Kennedy написал про pro Immitable. Это у них в текстовом виде такое форматирование дурацкое, что непонятно, кто автор. :)
Nik
func main() {
var i interface{} = "hello"
f, ok := i.(float64)
fmt.Println(f, ok)
f = i.(float64) // panic
fmt.Println(f)
}
А это как работает? Если я сохраняю второй параметр, то все ок, если нет то паника. Откуда функция утверждения типа знает, что я буду дальше делать с тем, что она вернула?