Size: a a a

2020 May 10

zl

ziggy lucid in Go-go!
я сюда за откровениями хожу как на работу
источник

М

МишанЯ in Go-go!
Мерль🛠
Типовой параметр канала будет равен типу структуры

https://go-tour-ru-ru.appspot.com/concurrency/2
То есть передав имя структуры, каналу автоматом передастся ее тип? Так что ли?)
источник

М

Мерль🛠 in Go-go!
МишанЯ
То есть передав имя структуры, каналу автоматом передастся ее тип? Так что ли?)
Тип канала описывается как chan ТИП_ЗНАЧЕНИЯ
источник

М

Мерль🛠 in Go-go!
Из двух слов
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
мутабельные типы можно использовать как ключи
на самом деле - нет

ты можешь взять копию слайса, а потом изменить оригинальный, и данные изменятся и там, и там. поэтому слайс не годится в качестве ключа

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

так что имплементация == для этих типов - вторичный признак. те же слайсы вполне сравниваются, см bytes.Equal()
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
на самом деле - нет

ты можешь взять копию слайса, а потом изменить оригинальный, и данные изменятся и там, и там. поэтому слайс не годится в качестве ключа

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

так что имплементация == для этих типов - вторичный признак. те же слайсы вполне сравниваются, см bytes.Equal()
bytes.Equal – это почти хак

[]byte сравниваются только за счёт того, что операторы эквивалентности определены для строк
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
на самом деле - нет

ты можешь взять копию слайса, а потом изменить оригинальный, и данные изменятся и там, и там. поэтому слайс не годится в качестве ключа

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

так что имплементация == для этих типов - вторичный признак. те же слайсы вполне сравниваются, см bytes.Equal()
А значение внутри ссылочного типа  я к сожалению могу поменять для некоторых типов  — для каналов например
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
bytes.Equal – это почти хак

[]byte сравниваются только за счёт того, что операторы эквивалентности определены для строк
почему хак-то?
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
почему хак-то?
ну потому что это на самом деле каст двух слайс байт к строкам и сравнение
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
ну потому что это на самом деле каст двух слайс байт к строкам и сравнение
и что? как строка устроена - ты помнишь?
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
и что? как строка устроена - ты помнишь?
Конечно
Но это не означает что для слайсов байт определена операция сравнения в языке

В качестве ключей мар можно использовать любые типы, для которых эта операция есть, даже если она вызывает панику
источник

DP

Daniel Podolsky in Go-go!
кое где, где мне профайлер bytes.Equal() показал, как значимого потребителя, я его переписывал в сравнение циклом
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
Конечно
Но это не означает что для слайсов байт определена операция сравнения в языке

В качестве ключей мар можно использовать любые типы, для которых эта операция есть, даже если она вызывает панику
но дело-то не в ней! это просто удобный признак. дело-то как раз в мутабельности
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
кое где, где мне профайлер bytes.Equal() показал, как значимого потребителя, я его переписывал в сравнение циклом
Это очень странно кстати, по идее он не должен давать накладных расходов – там конкретный случай который компилятором оптимизируется хорошо
источник

М

Мерль🛠 in Go-go!
Даже аллокаций не должно быть
источник

DP

Daniel Podolsky in Go-go!
Мерль🛠
Это очень странно кстати, по идее он не должен давать накладных расходов – там конкретный случай который компилятором оптимизируется хорошо
давно было
источник

М

Мерль🛠 in Go-go!
Daniel Podolsky
но дело-то не в ней! это просто удобный признак. дело-то как раз в мутабельности
Это вопрос реализации операции сравнения
источник

М

Мерль🛠 in Go-go!
источник

М

Мерль🛠 in Go-go!
Смотрите

Я использую эмулятор типа слайса — его в качестве ключа использовать можно
источник

DP

Daniel Podolsky in Go-go!
да, потому, что тип elem в ключ включен не будет
источник