Gaiaz
Anonymous
Привет всем. Надо реализовать бэкедн мессенжера. Нужен человек с опытом разработки на го.
Мерль
Slava
и главное - деньги?
Konstantin
Можно ли как-то из структуры получить\установить значение на n'ое поле?
Вот есть структура
type point struct {
x int
y int
z int
}
Могу я как-то установить значение второго поля, то есть поля Y, есть у меня есть только информация что надо установить на второе поле?
Konstantin
итератор может какой
Mike
&point{1, 2, 3}, не?
Mike
но вообще чет не круто ты делаешь, у тебя есть именованные поля, а ты по порядку хочешь, лучше делать a.y :=
Mike
если одно конкретное поменять хочешь
Oleg
分解物質
Oleg
https://play.golang.org/p/2lTHgS6Ath
Oleg
( ͡° ͜ʖ ͡°)
Oleg
Oleg
igor
изврат=)
все как ты и любишь же, нет? :)
Konstantin
Может у кого будут идеи как реализовать это иначе?)
https://github.com/SolidlSnake/easyvk-go/blob/master/easyvk/account.go#L78
Функция getAppPerm
Oleg
Как вариант: не нужно разбирать каждый бит в отдельное поле. Лучше положи битовую карту в отдельный тип (вроде type PermissionBits uint) и для каждого бита пропиши метод:
func (b PermissionBits) Notify() bool {
return b&notifyBit != 0
}
Oleg
Или даже лучше, чтобы не множить методы:
const (
PermNotify = 1
PermFriends = 2
...
)
func (b PermissionBits) Can(perm uint) bool {
return b&perm != 0
}
Konstantin
Да, это красиво будет, спасибо, но проблему кучи ифов не решает :(
Slava
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
Slava
кажется тут красивее будет не в десятичной системе
Slava
я бы смещениями сделал к примеру
Slava
https://play.golang.org/p/rn_2NIEYm2
Slava
как-то так
Slava
не используй, смещай как захочешь
Dmitriy / დიმიტრი
Этический вопрос. Я взял у чувака библиотеку с MIT лицензией. Переписал её под себя. Лицензия тоже MIT. Мне надо ссылаться на этого чувака?
Мерль
Мерль
Построчный разбор лицензии MIT / Хабрахабр
https://m.habrahabr.ru/post/310976/
Aleksandr
коллеги, читаю json, в структуре поле float64, из json значение 20.0 корректно анмаршаллится во float64, но при маршаллинге записывается как 20, что не хочет читать клиентская софтина - ругается что инт пихаю вместо флоата. Есть мысли кроме регуляркой менять реплейсить (это уже пройденный этап)?
Oleg
Может быть, реализовать json.Marshaler на типе поверх флоата?
Aleksandr
MXLTN
как зафорсировать gorm делать hard delete когда используешь gorm.Model ?
hamper 𓅝
WTFPL — самая нормальная лицензия.
Aleksandr
коллеги, читаю 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
}
Konstantin
При использовании iota нельзя использовать сторонние функции?
Мне вот надо сделать степени двойки, math.Pow не пускают, говорят экстримизм
Slava
константные выражения вычисляются при компиляции
Slava
нельзя использовать runtime функции
Konstantin
И оператора возведения в степень, конечно же, нет. Один питон няшка, блин)
Андрей
Konstantin
1 « iota
да, тут в другом чатике подсказали)
все равно спасибо)
Sergei
@SolidlSnake вот же сразу ответили
Sergei
А каким образом это реализуется? Можно как-то задать двоичное число?
Sergei
https://play.golang.org/p/rn_2NIEYm2
Sergei
Ок, плюс в доках и блоге golang подробно объясняют с примерами
Slava
=) << это информатика 5 класс
Slava
обычно на первых уроках проходят двоичную систему и сдвиги битовые
Slava
по крайне мере у нас так было
Slava
Кто-нибудь поедет на gophercon в этом году?
Konstantin
MXLTN
как зафорсировать gorm делать hard delete когда используешь gorm.Model ?
sc/\mp
hi all
Oleg
sc/\mp
Ok
Oleg
Мерль
Мерль
Go: многопоточная запись в файл CSV
Иногда при разработке приложений на Go бывает необходимость записи в файл CSV из нескольких горутин, при этом встроенный CSV Writer непотокобезопасен.
...
https://tehnojam.pro/category/development/go-mnogopotochnaja-zapis-v-fajl-csv.html
Ruslans
Ruslans
"хайлоад"
Мерль
Vladislav
Какое-то совсем неэлегантное решение.
Мерль
Но вообще адок какой-то, имхо
Vladislav
В принципе есть и другие варианты. Например, сделать актор, который только записывает байтики в файл. И принимать их через канал. Будет ли оно лучше работать неясно.
Vladislav
Коллега говорит, что так все же лучше, чем мьютексы.
Daniel
так идеоматичнее
Daniel
но однозначно медленнее
Daniel
(потому, что в канале больше одного мутекса)
Roman
Вообще не будет медленнее
Roman
Просто потому, что это запись в файл
ainu
Смотрите. У меня есть некая самописная база данных в памяти. С индексом. Несколько мап. Диск есть, но в качестве скажем так, бекапа. Индекс не на диске, данные в памяти и диске, при чтении диск не используется, только при записи и при старте.
Клиенты могут делать в неё запись. Пересчет индекса быстрый, но не мгновенный.
Вариант первый - клиент ставит мьютекс, записывает, разлочивает.
Вариант второй - клиент в channel записывает что хочет записать, отдельна горутина слушает его и перестраивает индекс.
Внимание вопрос - что быстрее?
Roman
Roman
В том же Tarantool'е запись на диск делает только 1 поток
Мерль
Смотрите. У меня есть некая самописная база данных в памяти. С индексом. Несколько мап. Диск есть, но в качестве скажем так, бекапа. Индекс не на диске, данные в памяти и диске, при чтении диск не используется, только при записи и при старте.
Клиенты могут делать в неё запись. Пересчет индекса быстрый, но не мгновенный.
Вариант первый - клиент ставит мьютекс, записывает, разлочивает.
Вариант второй - клиент в channel записывает что хочет записать, отдельна горутина слушает его и перестраивает индекс.
Внимание вопрос - что быстрее?
Я бы сделал оба варианта.
Второй быстрее, ведь клиенту не надо ждать записи