
Олег
17.04.2017
17:53:50

Олег
17.04.2017
17:55:29

Ighar
17.04.2017
17:56:25

Konstantine
17.04.2017
18:02:34
Может у кого будут идеи как реализовать это иначе?)
https://github.com/SolidlSnake/easyvk-go/blob/master/easyvk/account.go#L78
Функция getAppPerm

Google

Олег
17.04.2017
18:12:35
Как вариант: не нужно разбирать каждый бит в отдельное поле. Лучше положи битовую карту в отдельный тип (вроде type PermissionBits uint) и для каждого бита пропиши метод:
func (b PermissionBits) Notify() bool {
return b¬ifyBit != 0
}
Или даже лучше, чтобы не множить методы:
const (
PermNotify = 1
PermFriends = 2
...
)
func (b PermissionBits) Can(perm uint) bool {
return b&perm != 0
}

Konstantine
17.04.2017
18:15:09
Да, это красиво будет, спасибо, но проблему кучи ифов не решает :(

Slava
17.04.2017
18:18:17
const notifyBit = 1
const friendsBit = 2
const photosBit = 4
const audioBit = 8
const videoBit = 16
const pagesBit = 128
const statusBit = 1024
const notesBit = 2048
const messagesBit = 4096
const wallBit = 8192
const adsBit = 32768
const offlineBit = 65536
const docsBit = 131072
const groupsBit = 262144
const notificationsBit = 524288
const statsBit = 1048576
const emailBit = 4194304
const marketBit = 134217728
кажется тут красивее будет не в десятичной системе
я бы смещениями сделал к примеру

Konstantine
17.04.2017
18:20:20

Slava
17.04.2017
18:25:02
https://play.golang.org/p/rn_2NIEYm2
как-то так

Олег
17.04.2017
18:30:36

Slava
17.04.2017
18:31:27
не используй, смещай как захочешь

Monday Begins on Saturday
17.04.2017
20:13:51
Этический вопрос. Я взял у чувака библиотеку с MIT лицензией. Переписал её под себя. Лицензия тоже MIT. Мне надо ссылаться на этого чувака?

Мерлин
17.04.2017
20:34:08

Google

Мерлин
17.04.2017
20:40:17
Построчный разбор лицензии MIT / Хабрахабр
https://m.habrahabr.ru/post/310976/

Aleksandr
17.04.2017
20:42:13
коллеги, читаю json, в структуре поле float64, из json значение 20.0 корректно анмаршаллится во float64, но при маршаллинге записывается как 20, что не хочет читать клиентская софтина - ругается что инт пихаю вместо флоата. Есть мысли кроме регуляркой менять реплейсить (это уже пройденный этап)?

Олег
17.04.2017
20:46:57
Может быть, реализовать json.Marshaler на типе поверх флоата?

Aleksandr
17.04.2017
20:57:44

Max
17.04.2017
21:26:02
как зафорсировать gorm делать hard delete когда используешь gorm.Model ?

hamper ?
17.04.2017
21:28:52
WTFPL — самая нормальная лицензия.

Aleksandr
17.04.2017
22:06:16
коллеги, читаю json, в структуре поле float64, из json значение 20.0 корректно анмаршаллится во float64, но при маршаллинге записывается как 20, что не хочет читать клиентская софтина - ругается что инт пихаю вместо флоата. Есть мысли кроме регуляркой менять реплейсить (это уже пройденный этап)?
для истории:
type VideoQuality float64
func (vq VideoQuality) MarshalJSON() ([]byte, error) {
return []byte(strconv.FormatFloat(float64(vq), 'f', 1, 64)), nil
}

Konstantine
17.04.2017
22:38:12
При использовании iota нельзя использовать сторонние функции?
Мне вот надо сделать степени двойки, math.Pow не пускают, говорят экстримизм

Slava
17.04.2017
22:40:53
константные выражения вычисляются при компиляции
нельзя использовать runtime функции

Konstantine
17.04.2017
22:41:53
И оператора возведения в степень, конечно же, нет. Один питон няшка, блин)

Андрей
17.04.2017
22:50:26

Konstantine
17.04.2017
22:50:43
1 « iota
да, тут в другом чатике подсказали)
все равно спасибо)

Sergey
17.04.2017
22:50:51
@SolidlSnake вот же сразу ответили
А каким образом это реализуется? Можно как-то задать двоичное число?
https://play.golang.org/p/rn_2NIEYm2

Konstantine
17.04.2017
22:51:28

Sergey
17.04.2017
22:53:02
Ок, плюс в доках и блоге golang подробно объясняют с примерами

Slava
17.04.2017
23:16:54
=) << это информатика 5 класс

Konstantine
17.04.2017
23:20:10

Google

Slava
17.04.2017
23:22:02
обычно на первых уроках проходят двоичную систему и сдвиги битовые
по крайне мере у нас так было
Кто-нибудь поедет на gophercon в этом году?

Konstantine
17.04.2017
23:38:52

Max
18.04.2017
03:28:42
как зафорсировать gorm делать hard delete когда используешь gorm.Model ?

scmp
18.04.2017
06:22:48
hi all
Ok

Мерлин
18.04.2017
06:26:51
Go: многопоточная запись в файл CSV
Иногда при разработке приложений на Go бывает необходимость записи в файл CSV из нескольких горутин, при этом встроенный CSV Writer непотокобезопасен.
...
https://tehnojam.pro/category/development/go-mnogopotochnaja-zapis-v-fajl-csv.html

Ruslan
18.04.2017
09:34:14
"хайлоад"

Мерлин
18.04.2017
09:36:08

Vladislav
18.04.2017
09:40:26
Какое-то совсем неэлегантное решение.

Мерлин
18.04.2017
09:40:29
Но вообще адок какой-то, имхо

Vladislav
18.04.2017
09:43:16
В принципе есть и другие варианты. Например, сделать актор, который только записывает байтики в файл. И принимать их через канал. Будет ли оно лучше работать неясно.
Коллега говорит, что так все же лучше, чем мьютексы.

Daniel
18.04.2017
10:07:01
так идеоматичнее
но однозначно медленнее
(потому, что в канале больше одного мутекса)

Roman
18.04.2017
11:16:16
Вообще не будет медленнее

Google

Roman
18.04.2017
11:17:31
Просто потому, что это запись в файл

ainu
18.04.2017
11:21:58
Смотрите. У меня есть некая самописная база данных в памяти. С индексом. Несколько мап. Диск есть, но в качестве скажем так, бекапа. Индекс не на диске, данные в памяти и диске, при чтении диск не используется, только при записи и при старте.
Клиенты могут делать в неё запись. Пересчет индекса быстрый, но не мгновенный.
Вариант первый - клиент ставит мьютекс, записывает, разлочивает.
Вариант второй - клиент в channel записывает что хочет записать, отдельна горутина слушает его и перестраивает индекс.
Внимание вопрос - что быстрее?

Daniel
18.04.2017
11:22:04

Roman
18.04.2017
11:24:55
В том же Tarantool'е запись на диск делает только 1 поток


Мерлин
18.04.2017
11:26:58
Смотрите. У меня есть некая самописная база данных в памяти. С индексом. Несколько мап. Диск есть, но в качестве скажем так, бекапа. Индекс не на диске, данные в памяти и диске, при чтении диск не используется, только при записи и при старте.
Клиенты могут делать в неё запись. Пересчет индекса быстрый, но не мгновенный.
Вариант первый - клиент ставит мьютекс, записывает, разлочивает.
Вариант второй - клиент в channel записывает что хочет записать, отдельна горутина слушает его и перестраивает индекс.
Внимание вопрос - что быстрее?
Я бы сделал оба варианта.
Второй быстрее, ведь клиенту не надо ждать записи

ainu
18.04.2017
11:29:27
Клиент итак не будет ждать. Клиент получит мгновенно "ок, сделаем". дальше запускается горутина котора делает мьютекс или пишет задание в channel.
Но идея с одним потоком для записи хороша и понятна

Roman
18.04.2017
11:30:19
Имхо

ainu
18.04.2017
11:31:03
Ну такая идея. В случае ошибки записи клиент в дураках, да.

Dmitriy
18.04.2017
11:31:09
Если памяти много, можно поддерживать реплику основной бд, которая и будет лочиться при дампе на диск, а основная всегда работать в штатном режиме

ainu
18.04.2017
11:31:11
Ничего страшного в моем случае.
дамп на диск тоже не страшно. Его можно не сразу а раз в пять минут например.
Самое главное индекс пересчитать.
А индекс использует мапы, а в мапы параллельно писать нельзя
Ок, допустим клиент получает отмашку "{status: 'OK'}".
Вопрос что быстрее - мьютексы или чанел

Ivahaev
18.04.2017
11:34:08
В канале внутри мутекс. Вывод напрашивается сам.

Daniel
18.04.2017
11:34:13
два
но - канал бывает буферизованный

Google

ainu
18.04.2017
11:34:25
два
хех. Вопросов больше не имею.

Roman
18.04.2017
11:34:42
Тут очень много случаев race condition может быть. Данные записались не в том порядке или что то не так пошло. Думаю, не зря in-memory DB часто однопоточны

Daniel
18.04.2017
11:34:49
так что в реальности буферизованный канал может оказаться быстрее

ainu
18.04.2017
11:34:55

Ivahaev
18.04.2017
11:35:14
Канал, в добавок, нагляднее будет.

Daniel
18.04.2017
11:35:21
но это как раз и будет буферизованный канал, по факту

ainu
18.04.2017
11:36:30
еще вопрос. после того как начал писать в map и до того как закончил писать в map - читать из него безопасно? для читателей надо делать лок пока не запишут?

Daniel
18.04.2017
11:53:22
надо делать лок
поэтому надо пользовать rwmutex

Kirill
18.04.2017
12:08:59
https://github.com/avelino/awesome-go/pull/1371/files#diff-04c6e90faac2675aa89e2176d2eec7d8R815

Daniel
18.04.2017
12:29:18
что ты имеешь в виду?

Kirill
18.04.2017
12:30:12
https://github.com/golang/go/issues/17973

Anton
18.04.2017
13:42:23
добрый день. Есть такая задачка. Нужно накалякать rest server.
Есть кучка сущностей, которые могут возвращаться в ответах. Само тело ответа состоит из
{metadata: {...}, response: {......}}
В зависимости от запроса нужно подменять в
поле response данные на эти сущности. Как сие заделать есть идеи? куды копать?
желательно пользовать echo