
Aleksandr
24.07.2018
19:41:32
текст ошибки приведи

Artem
24.07.2018
19:43:35
в goland нет ошибок просто выходит как то из дебага в vs code
Failed to continue.
в функции doSomeWork
msg, description := doSomeWork(createSlice[i], update.Message.Chat.ID)
bot.Send(msg)
выполняется такой код
msg := tgbotapi.NewPhotoUpload(chatID, fileName)
msg.Caption = data.Name
description = data.Description
return msg, description

Aleksandr
24.07.2018
19:49:49
маловато данных

Google

Artem
24.07.2018
19:59:40
по сути логика следующая
//возвращает файл/картинку название и описание
file, caption, description := doSomething(slice[0], chatID)
//отдаем все юзеру
msg := tgbotapi.NewPhotoUpload(chatID, file)
msg.Caption = caption
bot.Send(msg)
//сюда уже не проходит
// те после картинки и названия идет подробное описание
msgDescription := tgbotapi.NewMessage(chatID, description)
bot.Send(msgDescription)
это не работает только в дебаге
без дебага вся последовательность отрабатывает
но так я не могу проследить то что мне нужно(

Aleksandr
24.07.2018
20:08:31
мало данных

Andrei
24.07.2018
20:29:47

Slava
25.07.2018
01:13:00
https://twitter.com/sethvargo/status/1021887669368811520

Pawel
25.07.2018
04:53:44

The
25.07.2018
06:10:15
ребятки, если в QueryContext() передавать контекст, и во время одного из вызовов rows.Next() он будет закрыт, то rows.Next() вернет false и цикл прервется?
судя по всему, сам запрос - отдельно, а роусы к нему отдельно, и их сканнинг от контекста не зависит.

Pawel
25.07.2018
06:35:38

The
25.07.2018
06:38:23
я гляну чуть позже на него, а кто-то возвращает коллекцию из базы через канал?
т.е., делает запрос, получает ответ, создает канал, запускает горутину сканирующую значения, и сразу же возвращает канал, а горутина сканирует и пишет в канал отсканненые модели.
вроде отправка в канал не очень быстрая

Google

The
25.07.2018
06:39:26
ну т.е. может лучше аппендить в слайс и его возвращать.
кто-то может заморачивался по этому поводу или имеет какие-то мысли?
аппенд в слайс ок, но когда у нас выборка например товаров штук 100000, нужно курсором как-то читать, чтобы все в память не писать.
думаю может сделать два метода, для маленьких выборок - слайсом возвращать, а для больших, что-то вроде курсора придумать.

Daniel
25.07.2018
06:41:56
вроде отправка в канал не очень быстрая
опять...
где вы этого нахватались?
вы только что по сети сходили, подождали выборку, распарсили ответ. канал на этом фоне вы даже померять не сможете.
но "вроде не очень быстрая"

The
25.07.2018
06:42:34
ну если сравнить отправку в канал, и аппенд в слайс

Daniel
25.07.2018
06:42:48
зачем их сравнивать?
что вы от результата ждете?

The
25.07.2018
06:43:12
затем, что это два альтернативных варианта как получать данные из базы, через канал, или уже готовый слайс.

Daniel
25.07.2018
06:44:00
так вот, при прочих расходах эти два метода одинаковые, занимают 0. но канал при этом уже способен работать с горутинами

The
25.07.2018
06:44:39
ну т.е. вы говорите, что канал "чуть лучше" в этом плане?

Daniel
25.07.2018
06:45:22
канал существенно лучше для передачи чего бы то ни было между горутинами

The
25.07.2018
06:45:59
окей, наверное тогда попробую пойти по пути каналов.

Anton
25.07.2018
07:38:26
всем ? правильно ли я делаю: допустим, мне нужен некий тип ShortTime, который как бы "наследуется" от time.Time, и у него я просто хочу переопределить методы MarshalJSON и UnmarshalJSON, чтобы при работе с json он понимал строки типа "15:00", "12:20" и т.д.
пробовал делать так:
type ShortTime time.Time
но тогда при работе с ним его нужно постоянно "конвертировать" в/из time.Time, например,
func (st *ShortTime) DoSomething() {
t := time.Time(*st)
// сделать что-то с t
*st = &ShortTime{t}
}
остановился на варианте "embedding":
type ShortTime struct {
time.Time
}
таким образом все методы time.Time доступны сразу на переменной типа ShortTime, но тут тоже возникает вопрос, использовать embedding time.Time или через поинтер *time.Time.

Daniel
25.07.2018
07:39:35
а зачем через поинтер?

John
25.07.2018
07:41:54
всем ? правильно ли я делаю: допустим, мне нужен некий тип ShortTime, который как бы "наследуется" от time.Time, и у него я просто хочу переопределить методы MarshalJSON и UnmarshalJSON, чтобы при работе с json он понимал строки типа "15:00", "12:20" и т.д.
пробовал делать так:
type ShortTime time.Time
но тогда при работе с ним его нужно постоянно "конвертировать" в/из time.Time, например,
func (st *ShortTime) DoSomething() {
t := time.Time(*st)
// сделать что-то с t
*st = &ShortTime{t}
}
остановился на варианте "embedding":
type ShortTime struct {
time.Time
}
таким образом все методы time.Time доступны сразу на переменной типа ShortTime, но тут тоже возникает вопрос, использовать embedding time.Time или через поинтер *time.Time.
ИМХО, тут поинтер не нужен

Anton
25.07.2018
07:41:57
да чёрт его знает, в этом в принципе тоже вопрос, нужен ли поинтер. у меня с ними пока не очень простые отношения, т.к. нет бэкграунда нормальных языков, только js ?♀️

Daniel
25.07.2018
07:44:07
ага
тогда не пользуйте пока :)
как вылезет "я меняю значение, а оно не меняется" - так и поймете, где использовать поинтер

Google

Anton
25.07.2018
07:48:28
с поинтерами пока не могу сказать, что мне всё понятно, потому что тут ещё есть особенности реализации библиотек. например, если я использую github.com/satori/go.uuid и определяю модели типа
type Model struct {
ID *uuid.UUID `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
то для ID мне нужен поинтер с точки зрения реализации библиотеки satori/go.uuid, потому что иногда я хочу его скрыть из ответа, и если там был бы не поинтер, а просто uuid.UUID, а значения не было бы, то оно отдавало бы "нулевой" uuid, "00000000-0000-0000-0000-000000000000", а так я могу ему сделать m.ID = nil, и его не будет.
хотя я бы с радостью и тут не использовал поинтеры.

V
25.07.2018
08:11:35
но ведь это фича джейсон маршаллинга

Anton
25.07.2018
08:13:47
вот кстати про этот вопрос, правильно ли я понимаю, что omitempty игнорирует нулевые значения в кастомных MarshalJSON методах? например,
type MyUUID struct {
uuid.NullUUID
}
type Model struct {
ID MyUUID `json:"id,omitempty"`
}
func (u MyUUID) MarshalJSON() ([]byte, error) {
fmt.Println("valid", u.Valid)
if !u.Valid {
return json.Marshal(nil)
}
return json.Marshal(u.NullUUID)
}
m := Model{}
json.NewEncoder(os.Stdout).Encode(m)
valid false
{
"id": null
}
т.е. то, что там omitempty, а маршалится nil, ему как бы всё равно
и единственный способ — использовать поинтер

V
25.07.2018
08:30:37
omitempty в этой либе игнорируется, т.к. там свой кодек, который переопределяет UnmarshalText

Artem
25.07.2018
08:33:38
всем привет
снова вопрос по hugo
не могу понять почему он не тянет css
в themes/theme-name/layouts
определены laytouts для страниц
в partials определены header & footer в которых берутся css из каталога project/static/css
на основе project/archtypes/default.md создается файл по шаблону project/themes/theme-name/layouts/items/single.html
в котором также прописаны {{partial "header.html" . }} и {{partial "footer.html" . }}
= project/content/item.md
но вот стили css к нему уже не тянутся
не понимаю (((

Pawel
25.07.2018
09:17:23

Anton
25.07.2018
10:29:22
это наркомания :(

Anton
25.07.2018
10:32:20
а это вот *st = &ShortTime{t} ?
логика такая была, например, нужен метод, который добавляет 1 час:
type ShortTime time.Time
func (st *ShortTime) AddOneHour() {
t := time.Time(*st)
// тут добавляем час
// и через поинтер присваиваем в st новое значение
*st = &ShortTime(t)
}
то, что там фигурные скобки — очепятка, имел в виду круглые

Daniel
25.07.2018
10:33:22
нет, с круглыми ничего не выйдет

Anton
25.07.2018
10:33:38
если ShortTime struct, то да
а это пример был когда type ShortTime time.Time

Daniel
25.07.2018
10:33:57
а если нет, то & перед ней будет ошибкой
а, ок

Anton
25.07.2018
10:36:33
да, & лишний

Pawel
25.07.2018
10:46:49
да я к тому что там как раз таки через пойнтер надо метод делать

Stanislav
25.07.2018
10:54:41
тут вопрос назрел. go vs c# ?

Google

Женя
25.07.2018
10:56:31
?♂️

Aleksey
25.07.2018
10:56:51
Если холивара, то победит гладиолус.

Stanislav
25.07.2018
10:57:25
язык хочу быстрый серверный

Olzhas
25.07.2018
10:57:53

Sergey
25.07.2018
10:57:55

Admin
ERROR: S client not available

Olzhas
25.07.2018
10:58:00

Alan
25.07.2018
10:59:23

Stanislav
25.07.2018
11:00:06
я не хочу холивара я хочу какой то обьективной оценки чтобы понимать что у го есть какой то смысл вообще
ну типа го умеет то что не умеет шарп, окей убедили

Виктор
25.07.2018
11:01:15
для го не нужен .net, из очевидного

Olzhas
25.07.2018
11:01:19

Alan
25.07.2018
11:01:44
чтобы приводить аргументы в пользу того или иного, нужно сначала определиться с требованиями

Aleksey
25.07.2018
11:01:59

Sergey
25.07.2018
11:01:59

Olzhas
25.07.2018
11:02:25

Stanislav
25.07.2018
11:02:40
ну ребята я не думаю что у го и шарпа прямо уж такие разные задачи чтобы строить демагогию на этом

Olzhas
25.07.2018
11:02:42
жвм вообще топчик

Виктор
25.07.2018
11:03:05
жвм вообще топчик
ага, хочешь пиши на джаве, хочешь - на скале, хочешь на jython вообще

Google

Stanislav
25.07.2018
11:03:05
и там и там есть асинхронка, шарп разве что шедулится по ядрам не так красиво

Olzhas
25.07.2018
11:03:05

Aleksey
25.07.2018
11:03:06
лучше жабу брать
не так быстро, оверхед излишний. Сказано же — человек хочет скорости. Вот, асм и кокаин

Olzhas
25.07.2018
11:03:24
lmao

Aleksey
25.07.2018
11:03:39
Только ты хорошо пиши

Stanislav
25.07.2018
11:03:50
а можно без школьников-тролей ?

Данила
25.07.2018
11:04:05
Как можно задать имя бинарника и директорию, куда он соберется при выполнении go build?

Olzhas
25.07.2018
11:04:06

Anton
25.07.2018
11:04:24

Алексей
25.07.2018
11:04:57

Stanislav
25.07.2018
11:06:04

Anton
25.07.2018
11:06:08
наверное, когда есть куча времени, гора кокаина и адовое желание потрахаться, то стоит заморачиваться с асмом...

Stanislav
25.07.2018
11:06:15
хотя да, гошечка же не умеет ничего что умеют высокоуровневые языки

Konstantin
25.07.2018
11:07:06