
Максим
05.07.2017
18:20:36

John
05.07.2017
18:20:45
ну так вот

Ivan
05.07.2017
18:26:10

Максим
05.07.2017
18:28:14

Google

Ivan
05.07.2017
18:28:40
не, у меня не тока это задача
у меня main там норм работает
но вот хочу cmd команду с ограничением по времени
я знаю у http есть context
а тут?

Igor
05.07.2017
19:15:40
select по каналам + timer

Slava
05.07.2017
19:20:04
у cmd тоже есть контекст
https://golang.org/pkg/os/exec/#CommandContext

Ivan
05.07.2017
19:22:47
Ох

Anton
05.07.2017
20:53:14
новая порция базовых вопросов. Почему тру го вэй возвращать *Т заместо Т? И почему зашкварно возвращать *[]T заместо []Т?

Никита
05.07.2017
20:58:18
Ну массив это и так указатель
А указать на структуру меньше занимает памяти, потом проще дальше передавать, без аллокаций

Quet
05.07.2017
21:16:40
да никакое это не тру всегда возвращать указатель

Google

Slava
05.07.2017
21:18:52
*Type возвращется для того, чтобы иметь возможно возвращать null, [] и map[] сами по себе указатели и могут быть null


Евгений
05.07.2017
22:11:04
новая порция базовых вопросов. Почему тру го вэй возвращать *Т заместо Т? И почему зашкварно возвращать *[]T заместо []Т?
Если я верно понимаю:
*[]T - это указатель на слайс, который внутри себя указывает на массив Т, и итоге у вас указатель на указатель. Чрезмерно сложная структура.
[]T - это слайс, который внутри себя указывает на массив T. Логично и удобно, быстро передается в виде одного короткого указателя.
Другое дело, если вы хотели вернуть
*[...]T (к соалению, именно так вернуть не получится - нужно явно указать длину массива) - указатель на массив Т. Оно как бы логично, и указатель всего 1. Но проблема в том, что указатель на массив - это такой слайс на педальном приводе. Работать с массивом менее удобно, чем со слайсом, например, у массива фиксированая длина. То есть [2]T и [3]T - это уже разные типы. Нужно будет их как-то приводить, учитывать длину и прочее.
[...]T - это куча копирований и опять все неудобства массива.


Anton
05.07.2017
22:11:47
ну в принципе я понял что к чему. спасибо всем
если нужно передать слайс структур в функцию, которая может некоторые поля структур менять, то лучше писать
func test(arr *[]T)
или
func test(arr []*T)
. Я склоняюсь ко 2 варианту, с 1ым слишком дурно получается.

Евгений
05.07.2017
22:16:07
можно сразу func test(arr []T)]
https://play.golang.org/p/BOHsN4E_qh

Vladimir
05.07.2017
22:16:25
пока ты не собираешься расширять слайс

Евгений
05.07.2017
22:16:53
лучше дае https://play.golang.org/p/aVPCB9Y9Wu https://play.golang.org/p/aVPCB9Y9Wu

Vladimir
05.07.2017
22:16:54
@hellb0ys в Го слайс это структура, где есть len, capacity и указатель на данные
при передаче у тебя скопируется все 3 момента

Anton
05.07.2017
22:17:09

Vladimir
05.07.2017
22:17:20
но так как на данные указатель - то ты при обращении к arr[0] будешь иметь доступ к реальными данными

Anton
05.07.2017
22:18:37
пока ты не собираешься расширять слайс
сам слайс (в моем случае) в принципе получается в режиме чтения, ничего из него не удаляется, не добавляется. Только структуры внутри могут менять значения полей

Vladimir
05.07.2017
22:18:53
@hellb0ys https://play.golang.org/p/WFds_P1B2e
пока тебе не нужно удаление или аппенд - вполне достаточно передавать просто слайс

Anton
05.07.2017
22:24:44
ага. я просто пытался ковыряться с for i, val := range и там конечно же не канает))

Евгений
05.07.2017
22:24:44
с сложными структурами тоже работает - https://play.golang.org/p/17MIaqx3G5

Google

Anton
05.07.2017
22:25:46

Евгений
05.07.2017
22:26:04
:)

Vladimir
05.07.2017
22:29:43
@hellb0ys в общем сюрприз, но for i, val - val будет копией значения )

Anton
05.07.2017
22:30:35
ну я ж не могу писать val.id = 10. Вернее могу, но при выходе с функции все вернется в исходное состояние. Остается только по индексу писать

Vladimir
05.07.2017
22:30:48

Anton
05.07.2017
22:31:00
грустинка это

Vladimir
05.07.2017
22:31:11
но for i := range { data[i].id = 10 } - все будет ок

Anton
05.07.2017
22:31:27
ага. запомнить бы нюансы...

Vladimir
05.07.2017
22:31:48

[Anonymous]
06.07.2017
04:56:10
@FolderArchive - канал, где сливают платный полезный - образовательный контент и курсы, например можно скачать курсы "Нетологии" или все курсы "Бизнес Молодости".

Олег
06.07.2017
05:37:37
Надо в тех поддержку написать

Олег
06.07.2017
05:38:00
А то чёт больно умные люди сидят:) спамят в каналах, это же не первый раз

Анатолий
06.07.2017
05:52:04
Надо бота написать, если зашел юзер и сразу кидает ссылку на канал, то в бан его
ТП тут ничем не поможет

Andrew
06.07.2017
05:52:21
Надо банить до тех пор, пока номера мобильников не закончатся.

Анатолий
06.07.2017
05:52:58
пфф
Они не закончатся, прибыльное дело номера продавать, можно пачками покупать с эйпиаем для чтения смс

Олег
06.07.2017
05:53:45
о нем же спамят

Google

Vladimir
06.07.2017
05:54:21

Анатолий
06.07.2017
05:54:33
Ябеда
Корябеда

Vladimir
06.07.2017
05:54:38
Но вот пока ни один канал не забанили

Олег
06.07.2017
05:54:55

Andrew
06.07.2017
05:55:15
Нужен общедоступный реестр спамеров...

Vladimir
06.07.2017
05:56:04
Или аналог +м и капча

Олег
06.07.2017
05:58:04
можно написать бота...

Admin
ERROR: S client not available

Анатолий
06.07.2017
06:10:23
Парни, у меня вопрос по ститистике кода. Везде где смотрю примеры повально используются одно/двухбуквенное именование переменных, меня прям коробит. Насколько зазорно использовать, скажем до 8 символов имена? Например bucket вместо b и cookie вместо c?

Vladimir
06.07.2017
06:11:11

Анатолий
06.07.2017
06:11:36
А кто какие использует?

Ilya
06.07.2017
06:13:24
Мы стараемся не использовать одно-/двухбуквенные - неудобно с ними
Точнее, писать норм, читать - нет

Artem
06.07.2017
06:14:07
А кто какие использует?
Кол-во символов переменной обратно пропорционално вложенности и длинны участка, где она используется

corpix
06.07.2017
06:14:43
А кто какие использует?
Я обычно использую однобуквенное именование в очень коротких функциях. Длинные имена тоже использую, но в ситуациях, когда от выразительности сильно зависит читаемость

IronWolf
06.07.2017
06:15:11
если код легкий и банальный (аля мы сложим 2 числа) то короткие, если сложный то длиннные что бы потом можно было помять че там

Valentin
06.07.2017
06:38:03
Я короткие использую только общепринятые вроде res, err. Свои петеменные называю нормально :)

Анатолий
06.07.2017
06:42:25
Спасибо, отлегло

Zhenja
06.07.2017
06:46:00
ох уж эти комплексы по поводу длины переменной. Можно и длинное имя дать переменной такое, что нифига не понятно будет что она в себе несет

Google

Zhenja
06.07.2017
06:46:33
кмк, длина имени - не главное, главное уметь им пользоваться

Andrew
06.07.2017
06:46:51
Бывают ещё комплексы по длине строки в 80 символов.

Максим
06.07.2017
06:49:43

Vsevolod
06.07.2017
06:50:13
В приоритете конечно короткие имена.

Максим
06.07.2017
07:06:12
В го есть сокрещенный if?
типа
data[66] == 0x02 ? "Open" : "Close"

corpix
06.07.2017
07:07:15
И он не сокращенный if, а тернарный оператор

Максим
06.07.2017
07:08:21

Ivan
06.07.2017
07:22:18
По мотивам вчершних обсуждений.
map[string][]*T тоже плохо?

Vladimir
06.07.2017
07:24:59
А так не плохо и не хорошо

Ivan
06.07.2017
07:25:18
map[string][]T

Vladimir
06.07.2017
07:25:23
Ну то есть если ты скажешь какую цель достигает - ок

Ivan
06.07.2017
07:25:24
так?
ну, я как то простил момент что []*T и []T похожи
Прямо думал что использхуя []*T память экономлю

Vladimir
06.07.2017
07:27:10
Немного

Ivan
06.07.2017
07:27:44
угу, понял

Vladimir
06.07.2017
07:28:25
Ещё наверное имеет смысл когда у тебя где то есть какой нибудь протобуф и ты просто от него получил такие данные