@gogolang

Страница 1403 из 1630
Roman
13.09.2018
15:51:08
а, я думал и mut и const вместе
mut как mutability qualifier const для констант

Алексей
13.09.2018
15:51:23
ну тогда лучше mut в Go2

чтоб иммутабельность было проще писать, чем мутабельность

ну ещё у Pawel от этого неслабо бомбанёт, тоже плюс

Google
Savely
13.09.2018
15:51:58
ну тогда лучше mut в Go2
Не лучше, а это единственное решение. У людей могут быть переменные с название mut, это поломает совместимость. Роман же не просто так const выбрал.

Roman
13.09.2018
15:52:08
mutable key для мапы я бы вообще запретил
это ты бы запретил, а я не имею права решать за всех несколько миллионов программистов пишущих на Go.

это вообще не имеет никакого смысла
если сможешь это научно обосновать то может быть я внесу изменения в proposal, но пока не вижу смысла.

Алексей
13.09.2018
15:52:47
Roman
13.09.2018
15:53:37
Хер знает, меня эти пробелы напрягают, тип читается не цельно, разбивая себя на ненужные блоки. В Go2 такое точно не нужно, нужно искать другие решения.
другое решение только мануальное копирование. А оно громоздкое, опасное и ещё менее читабельное. нет других вариантов кроме как ходить по лезвию.

Алексей
13.09.2018
15:54:07
если сможешь это научно обосновать то может быть я внесу изменения в proposal, но пока не вижу смысла.
я честно говоря не знаю как там мапа устроена в Go, но вообще если это всё таки хэш мапа, то там мутабельность ключей приводит к некорректной работе мапы

Savely
13.09.2018
15:54:19
Дефолтная иммутабельность поломает даже примитивный пример уровня хелло ворлд

Savely
13.09.2018
15:56:00
конечно
А как я могу мутировать существующий ключ?

Daniel
13.09.2018
15:56:03
а?!

Google
Roman
13.09.2018
15:56:24
А как я могу мутировать существующий ключ?
ключём может быть указатель на структуру, и она окажется мутабельной. good old pointer aliasing

Алексей
13.09.2018
15:56:50
тогда сам указатель будет ключом или структура?

Savely
13.09.2018
15:56:54
ключём может быть указатель на структуру, и она окажется мутабельной. good old pointer aliasing
Блет, ну в теории да. Я просто даже не видел примеров когда ключами бывают сложные структуры.

Roman
13.09.2018
15:57:09
тогда сам указатель будет ключом или структура?
указатель в качестве ключа мапы

Алексей
13.09.2018
15:57:26
но сам указатель не получится мутировать

то есть ключ фактически иммутабельный (ну в самой мэпе)

Roman
13.09.2018
15:57:56
но сам указатель не получится мутировать
сам то указатель нет, а вот то что за ним к сожалению да

Алексей
13.09.2018
15:58:10
но мапа же по указателю будет сравнивать?

Daniel
13.09.2018
15:58:11
Roman
13.09.2018
15:58:22
то есть ключ фактически иммутабельный (ну в самой мэпе)
это называется shallow immutability, и не решает shared mutable state through pointer aliasing

Daniel
13.09.2018
15:58:49
ключ иммутабельный, потому, что он копия оригинала

Roman
13.09.2018
15:58:57
но мапа же по указателю будет сравнивать?
дело в том что у нас есть range over map, и там можно мутировать ключ

ключ иммутабельный, потому, что он копия оригинала
копия указателя это pointer aliasing и по прежнему mutable shared state... я писал о похожем gotcha вот здесь: https://github.com/romshark/Go-2-Proposal---Immutability#46-why-do-we-need-immutable-receivers-if-we-already-have-copy-receivers

Daniel
13.09.2018
16:01:04
тем не менее, ключ у мапы иммутабельный

Roman
13.09.2018
16:01:35
тем не менее, ключ у мапы иммутабельный
сам ключ да, но если ключ это указатель то... хьюстом, у нас проблемы.

Илья
13.09.2018
16:01:59
https://play.golang.org/p/3E4MZhZFzyy

давайте с примерами

что, где, какие ключи, где у вас там что

Lesha
13.09.2018
16:03:02
сам то указатель нет, а вот то что за ним к сожалению да
не всегда к сожалению.. Делал я счетчики с множемством параметров, где в качестве ключа мапы был указатель на объект (условно юзера). Этот объект мог в процессе рассчетов меняться/дополняться.

Google
Lesha
13.09.2018
16:04:23
так он и пишет - указатель не мутирует, объект за ним мутирует
я про "к сожалению", котороый не к сожалению)

Илья
13.09.2018
16:04:37
ну так для этого и кладут указатель, сожаления я не понимаю

Lesha
13.09.2018
16:12:49
ии...? что ты хочешь этим сказать? ?
как я понял, вы преподносите это как проблему, но это же не проблема

Roman
13.09.2018
16:16:04
как я понял, вы преподносите это как проблему, но это же не проблема
это может быть проблемой, но не обязательно, зависит от кейса. если ты хочешь защититься от мутабельности ключа наверняка, то данный концепт даёт тебе такую возможность. Кому нужна иммутабельность которая работает везде заисключением ключей map'ы? immutability это про типы. Типы могут быть иммутабельными, будь то переменная, поле структуры, возвратный значение функции, ресивер или ключ мапы

Daniel
13.09.2018
16:19:14
а и значения мапы иммутабельны

Roman
13.09.2018
16:19:17
Ключи мапы как раз таки должны быть иммутабельны, ты перепутал
ключи могут быть reference типами и в этом вся проблема

Daniel
13.09.2018
16:19:30
нет способв его модифицировать, иначе как вынуть и положить

Roman
13.09.2018
16:20:00
нет, не могут.
ну не будешь же ты отрицать компилирующийся работающий код сверху)

Daniel
13.09.2018
16:21:38
ключ мапы - *Person

то, на что он указывает - вообще не участвует никак в работе с мапой

ключ - иммутабельный

Google
Savely
13.09.2018
16:22:15
many-faced
13.09.2018
16:24:21
ребята, подскажите, как сделать так, чтобы я мог результат sql запроса сосканить в собственную структуру?

Roman
13.09.2018
16:24:54
ключ - иммутабельный
давайте выясним что мы имеем ввиду под ключём? ясное дело что значение ключа в данном случае это указатель, 8 байт. Однако указатель это reference type. Reference type предоставляет интерфейс к иному значению. Следственно ключ мапы в моём понимани это как сам указатель так и то, на что он указывает. Есть случаи, когда тебе пофиг меняется ли то на что указывает указатель или нет. Но иногда, тебе нужно это предотвратить. И то и то возможно в нынешнем proposal'е

Илья
13.09.2018
16:26:18
если ты кладешь указатель в мап, то ты получаешь ровно то, что хочешь, мап с указателями

Daniel
13.09.2018
16:26:32
> Следственно ключ мапы в моём понимани это как сам указатель так и то, на что он указывает. а ключ мапы - это то, из чего посчитан хеш, и что используется в операторе == при работе с ячейками, для которых произошла коллизия хеша не надо изобретать собственную терминологию...

Admin
ERROR: S client not available

Roman
13.09.2018
16:28:05
Эт не проблема
если из условной билиотеки packagex тебе возвращают иммутабельную reference на объект: * const packagex.Person и ты хочешь использовать его в качестве ключа, тогда map[*packagex.Person]bool не сойдёт, потому-что компилятор будет ругаться что типы не совместимы и правильно сделает. автор packagex не зря запретил тебе мутировать packagex.Person, на то есть причины, и убирать эту защиту в for range мапы это нонсенс, это ломает всю концепцию иммутабельности.

many-faced
13.09.2018
16:29:59
jmoiron/sqlx
шо, рефлект?..

Stanislav
13.09.2018
16:30:09
many-faced
13.09.2018
16:30:17
я думал может какой-то интерфейс структуре применить и всё

many-faced
13.09.2018
16:31:56
reform
спасибо, погляжую

Roman
13.09.2018
16:33:15
> Следственно ключ мапы в моём понимани это как сам указатель так и то, на что он указывает. а ключ мапы - это то, из чего посчитан хеш, и что используется в операторе == при работе с ячейками, для которых произошла коллизия хеша не надо изобретать собственную терминологию...
т.е. я согласен с тем что map[const *Person]bool это не особо нужно, указатель и так немутабельный, единственный эффект будет в том, что при проходе for range по мапе key нельзя будет изменить, в него нельзя будет ничего присвоить в теле for. однако что действительно важно это map[* const Person]bool, пояснение сверху

many-faced
13.09.2018
16:50:25


https://github.com/cridenour/go-postgis

Roman
13.09.2018
16:56:07
да, думаю стоит переименовать proposal в "Immutable Types"

Google
Илья
13.09.2018
17:01:27
у point реализован метод Scan - https://github.com/cridenour/go-postgis/blob/master/point.go#L47, поэтому оно умеет перевариваться в Scan

many-faced
13.09.2018
17:02:31
у point реализован метод Scan - https://github.com/cridenour/go-postgis/blob/master/point.go#L47, поэтому оно умеет перевариваться в Scan
Вот я не понимаю как это работает. Если у типа есть метод Scan, то как это связано с тем, что над переменной этого типа производится действие Scan ?

Илья
13.09.2018
17:04:25
Вот я не понимаю как это работает. Если у типа есть метод Scan, то как это связано с тем, что над переменной этого типа производится действие Scan ?
смотрите в доку https://golang.org/pkg/database/sql/#Rows.Scan, по клику на имя функции вам даже исходники откроются

https://golang.org/src/database/sql/convert.go#L209

many-faced
13.09.2018
17:09:07
https://golang.org/src/database/sql/convert.go#L209
ну тут я вижу что эта функция перебирает столбцы и записывает значения в соответствующие поступившие в Scan переменные. Но я не понимаю, как это запускает метод Scan того типа, который поступил в rows.Scan

Илья
13.09.2018
17:11:12
вы передаете указатель на объект в функцию scan объекта rows, которая внутри вызывает функцию convertAssign, которая проверяет, реализует ли переданное значение интерфейс dest.(Scanner) b

и если да, то вызывает его, чего вы не понимаете?

Savely
13.09.2018
17:13:46
и если да, то вызывает его, чего вы не понимаете?
Я думаю человек не понимает, что в Го можно реализовывать интерфейсы без ключевых слов.

extends, например

Savely
13.09.2018
17:14:18
Окей)

Vadim
13.09.2018
17:22:49
У нас есть стикеры группы?

Почему болгарские?

Heathcliff
13.09.2018
17:29:30
стикера сабжа есть

Страница 1403 из 1630