@proGO

Страница 1084 из 1674
trilog
25.12.2017
08:26:54
все равно что вы выйдете на стадион и просто заорете "привет", в ожидании ответочки

Arch
25.12.2017
08:27:11
Народ, а доступность переменных в структуре так же определяется заглавной буковй?

Ilya
25.12.2017
08:28:59
Народ, а доступность переменных в структуре так же определяется заглавной буковй?
Внутри пакета все поля структуры доступны, в других пакетах только те, что с заглавной

Arch
25.12.2017
08:29:51
Мля...ть

Google
Arch
25.12.2017
08:30:03
В смысле спасибо

Виталий
25.12.2017
08:36:33
Народ. С мп3 кто-нибудь пробовал? В питоне есть и pygame и mpg123, в го самым простым было пользовать библиотеку от одного японца (oto hajime) что ли, но там проблема воспроизведения на raspberry pi - звук будто пластинку тянут

Arch
25.12.2017
08:52:17
type RoomList map[int]*Room // Rooms List func (rl *RoomList) AddToList(r *Room) { *rl[r.id] = r } пишет: invalid operation: rl[r.id] (type *RoomList does not support indexing) Что делаю не так?

Arch
25.12.2017
08:59:34
А еще вопрос, если r - это указатель на структуру Room, то обращение к нему должно быть таким же как и к rl? те (*r).id?

почему компилятор пропустил r.id?

Daniel
25.12.2017
09:03:32
Arch
25.12.2017
09:03:47
Не должно
те когда мы обращаемся к самой структуре напрямую надо (*) , а если к полям структуры, то можно просто так?

Arch
25.12.2017
09:05:03
Благодарю!

Andrey
25.12.2017
09:33:24
Daniel Podolsky Посмотрел вашу презентацию. Можете поподробнее сказать чем плохи строки вместо пременных? Когда в структуру пишем строки.

Google
Andrey
25.12.2017
09:59:51
https://devconf.ru/data/devconf2016/ppt/185.pdf

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

Demuz
25.12.2017
10:46:48
Доброго времени суток всем! Есть один вопрос. Имеем структуру, которая получается приемом JSON POST запроса. type ArgsList struct { Arg1 string Arg2 string Arg3 string и т.д. } Получаю принятые данные, весь ArgList - {"ArgList": {"Arg1": "", "Arg2": "", "Arg3": "", и т.д.}} Теперь, нужно проверить динамически каждый параметр на пустоту. var argList ArgList <--- Заполнили инстанс данными из принятого JSON. resultErr := "Вы передали пустой %v" if argList.Arg1 != "" || argList.Arg2 != "" || argList.Arg3 != "" { result := fmt.Sprintf(resultErr, ???) (Вот здесь то и нужно вместо вопросов вставить конткретное поле, то есть Arg1, либо Arg2 и тд.) }

some_random_anonymous
25.12.2017
10:48:54
переходить на другой язык, где нет привязки к гитхабу)
Каким это макаром Go к Гитхабу привязан? 0_o

plq
25.12.2017
10:52:10
Каким это макаром Go к Гитхабу привязан? 0_o
Видимо, Import'ы с гитхаба имеются в виду

Demuz
25.12.2017
10:53:47
Demuz
25.12.2017
11:08:31


Vasily Romanov
25.12.2017
11:08:35
Сегодня вышла первая часть моего курса по Go на Coursera. Наслаждайтесь :) https://www.coursera.org/learn/golang-webservices-1?utm_source=mipt&utm_medium=institution&utm_campaign=telegram_post_mrg

Anatoly
25.12.2017
11:09:52
Допустим, имеем 20 полей Arg, нужно кратко ответить пользователю, какое именно из полей он передал пустым. Возможна ли краткая реализация такого?
reflect https://golang.org/pkg/reflect/? r := reflect.ValueOf(json) f := reflect.Indirect(r).FieldByName(field) пройди по каждому полю и выведи на соответсвующем не прошедшим проверку сообщение

Demuz
25.12.2017
11:13:32
Спасибо. Рефлект знаю. Думал может проще решение есть.

Мне почему то всегда кажется, что проходить по каждому полю, это потеря производительности. Может заблуждаюсь. Незнаю. Эти мысли ничем не подкреплены.

Andrey
25.12.2017
11:16:28
страница 13

что имеется ввиду?

Что плохо в Go как в языке Питонизмы: строки вместо переменных

тут в примере массив строк в структуре

Google
Andrey
25.12.2017
11:18:11
это не правильно?

Arch
25.12.2017
11:22:13
func (rl RoomList) AddToList() {} Народ подскажите, если для структуры определен метод, то при вызове этого метода структура копируется в него или передается по ссылке?

Равнозначны ли по памяти func (rl RoomList) AddToList() {} и func (rl *RoomList) AddToList() {}?

Andrey
25.12.2017
11:26:08
если это type []Room - он про массив стурктур не писал.

Arch
25.12.2017
11:26:32
Ну в смысле - да

type RoomList map[int]*Room

то есть при каждом вызове метода func (rl RoomList) AddToList() {} в памяти будет создаваться полная копия структуры rl?

Alexei
25.12.2017
11:27:27
тогда по ссылке, разницы (*RoomList) или (RoomList) по памяти не будет

мапа, как и слайс - это ссылка же

Arch
25.12.2017
11:28:03
мапа, как и слайс - это ссылка же
Ну тут частный случай, а мне в общем понять хочется.

Структура может быть с множеством полей

то есть получается что разница между (*RoomList) и (RoomList) лишь в объекте к которым применяется метод, для ссылки на *RoomList будут работать методы объявленные для func (rl *RoomList) AddToList(), а для RoomList будут работать методы объявленные для func (rl RoomList) AddToList()

так?

Andrey
25.12.2017
11:31:44
я думаю правильнее будет написать тестовую прогу и проверить. А не верить на слово

Alexei
25.12.2017
11:32:01
так?
нет

Andrey
25.12.2017
11:33:13
бенчмарк тебе покажет скольок памяти сьела функция

Google
Alexei
25.12.2017
11:33:40
в функцию (*RoomList) будет передан указатель rl, а в (RoomList) будет скопирована структура, в случае если RoomList - это структура, если это map или slice, то в первом случае будет передан указатель на ... во втором сам map или slice, а т.е. ссылка

Nikolay
25.12.2017
11:45:09
нет никакого смысла в метод инстанса передавать сам инстанс по значению

вот вообще никакого

ибо смысл метода объекта в общем случае - это манипуляция его внутренним состоянием, т.е. стейт машина

Евгений
25.12.2017
11:48:57
тогда проще все метоы делать с * ( pointer receiver )

Andrey
25.12.2017
11:49:06
вы хотите сказать что методы обьекта только для манипуляций внутрениими даными? А как тогда обьекту предавать ынешние данные? геттерами сететрами?

Admin
ERROR: S client not available

Andrey
25.12.2017
11:49:31
так он про это же и писал вроде?

Alexey
25.12.2017
11:49:51
тогда проще все метоы делать с * ( pointer receiver )
Конечно проще:) Если не паттерн builder или там не ещё что-то, что должно копировать, то проще указатели всегда.

Nikolay
25.12.2017
11:50:06
Andrey
25.12.2017
11:50:50
я из вашего поста это понял

Arch
25.12.2017
11:51:09
какой смысл в вызове метода для структуры, передавать в этот метод копию структуры, если он вызывается исключительно для нее, а все остальное можно передать параметрами в метод

Alexey
25.12.2017
11:51:21
А если там внутри какие-нибудь sync.Mutex лежат в структуре, то без указателя вообще багов можно наловить тысячи

Евгений
25.12.2017
11:52:03
мапа, как и слайс - это ссылка же
в слайсе ссылка только на данные, а вот длина и емкость лежат в самой структуре

Arch
25.12.2017
11:52:39
А если там внутри какие-нибудь sync.Mutex лежат в структуре, то без указателя вообще багов можно наловить тысячи
Каким образом? У тебя один объект, для которого описаны эти самые методы, и вызываться они будут относительно этоже объекта

Google
Евгений
25.12.2017
11:53:04
а дальше возможные веселые фокусы, когда элемент добавил, а он не добавился )

Евгений
25.12.2017
11:53:37
смысла - ноль, но много места для багов

Alexey
25.12.2017
11:54:39
Каким образом? У тебя один объект, для которого описаны эти самые методы, и вызываться они будут относительно этоже объекта
type A struct { x sync.Mutex y map[int]int } func (a A) doSomething() { // вот тут a.x - это уже другой мьтекс, который по умолчанию незалочен. // и если идти к мапе через его лок - получится race condition a.x.Lock() a.y[1] = 2 a.x.Unlock() }

Arch
25.12.2017
11:56:48
type A struct { x sync.Mutex y map[int]int } func (a A) doSomething() { // вот тут a.x - это уже другой мьтекс, который по умолчанию незалочен. // и если идти к мапе через его лок - получится race condition a.x.Lock() a.y[1] = 2 a.x.Unlock() }
Так в то-то и баг, что метод получается описан для struct A, а в сам метод приходит копия struct A, которая с исходным объектом (структурой) не связана

Arch
25.12.2017
11:57:44
копировать == баг

Alexey
25.12.2017
11:58:21
копировать == баг
Почему баг-то? Бывает, когда нужно именно копирование. Вон в том же logrus.WithField() как пример

Arch
25.12.2017
12:00:14
Ну вроде как считается, что методы для структуры - это замена классического ооп, но при использовании методов класса в других ЯП вы же не оперируете копией исходного объекта, а непосредственно самим объектом

Что сбивает с толку при переходе на го

Arch
25.12.2017
12:02:02
Возможно мой кругозор слишком узок и это действительно может быть настолько востребованная фича, что стоит отказаться от "интуитивного" поведения, ожидаемого при использовании данного функционала.

Евгений
25.12.2017
12:02:18
а race conditiond detector такое видит?

Alexey
25.12.2017
12:02:50
Евгений
25.12.2017
12:03:07
хуже, что иногда нет )

Arch
25.12.2017
12:03:27
Дьявол кроется в деталях)))

Andrey
25.12.2017
12:06:28
interface это указатель?

Эмин
25.12.2017
12:07:02
не уверен что интерфейс может быть указателем...

Andrey
25.12.2017
12:07:17
type TreeCell struct { Master *Master Tabs interface{} }

какой будет размер структуры?

Страница 1084 из 1674