Oleg
да тут полно уникумов я смотрю
Olzhas
Olzhas
Я хоть знаю как авторизацию сделать
Oleg
уверен?
Olzhas
уверен?
Ну да, берешь пароль, сохраняешь его хэш мд5...
Oleg
Ну да, берешь пароль, сохраняешь его хэш мд5...
хорошо, что 3 точками закончил. не продолжай плз
Olzhas
Olzhas
О, мой любимый вопрос - есть пакет на го асн1 с поддержкой всех тегов?
Olzhas
Хэшируют только слабаки.
Я тоже так думаю, поэтому авторизацию в рабочих проектах делаю по подписи
Anonymous
Всем привет. С чего начать чтобы писать бэкенд на GO? Подскажите. Я так понял для того чтобы написать бэкенд, надо GO связать с БД и написать API? Так? Это основные задачи?
Alexander
как и почти любого бэкенда, не смотря на язык разработки
Anonymous
ну это естественно!
Anonymous
Потом написать несколько своих роутеров... и ты готов)
Anonymous
Всем привет. С чего начать чтобы писать бэкенд на GO? Подскажите. Я так понял для того чтобы написать бэкенд, надо GO связать с БД и написать API? Так? Это основные задачи?
слишком общий вопрос... из него кажется что Вы никогда не писали REST API... в этом случае тут вам скорее всего не помогут
Anonymous
Не писал еще backend
Прочти сначала Язык программирования Go, а потом Go на практике
Aleksandr
можно
Kirill
Разрешаем, конечно
Kirill
🤣
Aleksandr
https://goo.gl/9W16QB
Stepan
Срочно нужна помощь
Stepan
Как удалить историю комитов с гитхаба
Je
Как удалить историю комитов с гитхаба
rebase и push с форсем в ветку, ты там что заказчика отматерил в коммитах?
Tigran
да не, скорее всего креденшиалы запалил
Aleksandr
Срочно нужна помощь
а зачем сюда пишешь? google => git clear history
Stepan
rebase и push с форсем в ветку, ты там что заказчика отматерил в коммитах?
Не, я работал с компа девушки и у меня в first commit прописалось ее авторство
Tigran
😱
Vladimir 👀
git commit --amend git push -f
Aleksandr
это ты искал ответ на вопрос
Dmytro
go func(prefix string) { defer wg.Done() q := &storage.Query{Versions:false, Delimiter:"/", Prefix: prefix} it = scl.Bucket(bucketName).Objects(ctx, q) for { attrs, err := it.Next() if err == iterator.Done { break } fmt.Println(attrs.Prefix) } }(prefix) не могу понять почему мне возвращает panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x58 pc=0x142e6a5]
Dmytro
(((
Slava
это на какой строчке?
Slava
подозревая что в fmt.Println(attrs.Prefix)
Dmytro
это если внутри рутини у меня for отрабатывает
Dmytro
for { attrs, err := it.Next() if err == iterator.Done { break }
Slava
ошибка на какой строчке возникает?
Dmytro
стектрейс говорит что в it.Next
Dmytro
возможно гугловский иттератор не умеет работать с рутинами (
Aid
Может проверку done выше двинуть?
Slava
горутины тут вообще не причём
Slava
ошибка у вас возникает потому что вы пытаетесь разыменовывать nil
Slava
если на строке it.Next(), значит it у вас nil
Slava
проверьте что у вас в it
Dmytro
добро. спасибо.
Dmytro
идея просто каждый элемент слайса в рутину запустить. может коряво написал
Dmytro
for _, prefix := range prefixes { wg.Add(1) go func(prefix string) { defer wg.Done() q := &storage.Query{Versions:false, Delimiter:"/", Prefix: prefix} it = scl.Bucket(bucketName).Objects(ctx, q) fmt.Println(prefix) fmt.Println(it) for { attrs, err := it.Next() if err == iterator.Done { break } fmt.Println(attrs.Prefix) } }(prefix) }
Dmytro
идея так была сделать
Altay unstppbl
Кстати кто еще сталкивался с причудами итерации над массивом и передачи поинтера на элемент в горутину?
Anton
всем 👋🏼 может кто сталкивался: указываю тэг json:"name,omitempty" для вложенного struct'а (важная часть — omitempty), этому вложенному стракту переопределяю метод MarshalJSON и этот метод иногда возвращает пустую строку. и в результате omitempty игнорируется, как-то так: type Something struct { Name TranslatedString `json:"name,omitempty"` } type TranslatedString struct { lang string Ru string `json:"ru,omitempty"` En string `json:"en,omitempty"` Cn string `json:"cn,omitempty"` } func (s *TranslatedString) MarshalJSON() ([]byte, error) { var str string switch s.lang { case "ru": str = s.Ru case "cn": str = s.Cn } if str == "" { str = s.En } return json.Marshal(str) }
Anton
в результате в json'е пустая строка (вместо отсутствия поля вообще): { "name": "" }
Aleksandr
type Something struct { Name *TranslatedString `json:"name,omitempty"` }
Aleksandr
если так переделать, то Name будет nil, и name опустится из json
Anton
type Something struct { Name *TranslatedString `json:"name,omitempty"` }
да, спасибо, чё-то замылился взгляд 🤷‍♀️
Anton
@zelenin я правда переделал уже, потому что понял, что будет сложно при работе с API (клиентам надо показать просто строку, а админам json со всеми полями). вот такой нормальный подход к "переопределению" полей для разных вариантов представления одних и тех же структур? https://gist.github.com/egorovli/41c1e94c370667f96321f12c65424783
Aleksandr
вроде норм
Anton
ок, спс 👍
Danylo
Здравствуйте, кто может подсказать где и какими способами можно хранить большие объемы данных кроме БД. Есть боты примерно несколько тысяч/десятков тысяч, нужно хранить данные, комманды и т.д причем данные обновляются каждый день по несколько раз, а БД на более чем 200 ГБ ооочень дорогие.
Danylo
бинарные файлы?
Не, обычный текст, данные о диске, проце, видюхе и т.д
Danylo
суперхацкер, шоль?
я вообще не из этой оперы
Aleksandr
ботовод-любитель
Aleksandr
готовит апокалипсис, а пока собирает данные с компов из сетки
Kirill
орно звучит
Kirill
на диске
ну - мой ответ таков
Kirill
не хочешь БД - храни на диске
Kirill
но потом всё равно родишь БД
Kirill
когда соберешь все грабли в округе
Aleksandr
мне представляется, что человек с тысячами ботов на руках, может найти пару тысяч в месяц на сервак с парой ТБ на борту
Aleksandr
иначе зачем оно все нужно?
Kirill
дык я и говорю
Kirill
берешь диски
Kirill
хранишь на них данные
Kirill
профит
Aleksandr
угу