@gogolang

Страница 246 из 1630
?FLERRY?
04.05.2017
13:17:18
Ну как-нибудь :) Я же поэтому и спросил

Илья
04.05.2017
13:20:03
https://golang.org/pkg/runtime/#GC

но это плохая практика, в любом случае

Maxim
04.05.2017
13:20:51
кстати, точно, можно руками GC запустить

Google
?FLERRY?
04.05.2017
13:21:20
О, спасибо. А то в Java такое не прокатит, там рекомендательный характер метод носит...

Может хоть здесь гк послушный

?

Maxim
04.05.2017
13:21:45
ну он тебе может не освободить данные

так что

хз-хз

?FLERRY?
04.05.2017
13:22:02
Бля... Так и тут...

Ну ладно ? Пойду думать

Mike
04.05.2017
13:22:29
пишешь на си

маленький блок

который тебе вот это сделает

и пользуешься им из го

Илья
04.05.2017
13:23:02
http://stackoverflow.com/questions/39761910/how-can-you-upload-files-as-a-stream-in-go

Google
Maxim
04.05.2017
13:23:02
вообще, кстати, не вижу проблемы в том, чтоб подождать, когда gc сам все очистит

?FLERRY?
04.05.2017
13:23:06
С другой стороны и так

Илья
04.05.2017
13:23:07
делешь буфер

и льешь через него

?FLERRY?
04.05.2017
13:23:20
делешь буфер
От это классный вариант

У меня просто есть несколько десятков аудио, которые постоянно висят в памяти

И если хоть одно из них висит больше минуты-две, это уже очередь солидная

Илья
04.05.2017
13:27:10
хз, зачем в памяти это держать, можно или чреез temp файлы качать туда, и читать потом оттуда, или, если немного упороться, стримить содержимое, но там есть мелочи, типо ContentLength не будет заполнен, и нужно будет руками делать

Ivan
04.05.2017
13:28:04
через unsafe напрямую с памятью работать

Мерлин
04.05.2017
13:28:57
И если хоть одно из них висит больше минуты-две, это уже очередь солидная
Лучше напиши минимально рабочее приложение, а потом посмотри, где там что висит

Преждевременная оптимизация - зло

?FLERRY?
04.05.2017
14:01:40
копируй, а не дампь.
куда копировать-то?

https://godoc.org/github.com/go-telegram-bot-api/telegram-bot-api#NewAudioUpload

вот этот метод

он умеет только в байты, либо в reader

Anton
04.05.2017
14:03:26
можно reader попробовать подсунуть тот, из которого ты читать будешь

Aleksandr
04.05.2017
14:03:36
он умеет только в байты, либо в reader
https://github.com/go-telegram-bot-api/telegram-bot-api/blob/master/bot.go#L116

Илья
04.05.2017
14:04:28
https://github.com/go-telegram-bot-api/telegram-bot-api/blob/ff42d6f7d1787d267bedf28764f69107820dd0fa/configs.go#L800

Google
Илья
04.05.2017
14:04:39
так этот "filereader", это обертка над обычным reader

?FLERRY?
04.05.2017
14:05:00
fmt.Println("Downloading " + URL + " ...") resp, err := http.Get(url) if err != nil { fmt.Print(err.Error()) } defer resp.Body.Close() fileBytes, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Print(err.Error()) } file = tgbotapi.FileBytes{Name: "test", Bytes: fileBytes} return file

сейчас так

Anton
04.05.2017
14:05:48
попробуй resp.Body подсунуть в FileReader

Илья
04.05.2017
14:06:08
но порефакторить придется, тк сейчас в этом скоупе ты закроешь body

?FLERRY?
04.05.2017
14:06:08
Илья
04.05.2017
14:06:15
:)

?FLERRY?
04.05.2017
14:06:22
пофиг :В

сейчас попробую тело запихнуть

Илья
04.05.2017
14:07:52
не пофиг, если ты в defer тело уже закроешь, то читать потом будет нечего

?FLERRY?
04.05.2017
14:08:15
стопе, ведь оно все в одном методе

Aleksandr
04.05.2017
14:08:48
не пофиг, если ты в defer тело уже закроешь, то читать потом будет нечего
https://github.com/go-telegram-bot-api/telegram-bot-api/blob/master/bot.go#L153 кажется оно должно знать размер до аплоада

?FLERRY?
04.05.2017
14:09:18
угу, но может и в -1

Илья
04.05.2017
14:09:19
ну, я как понял, из vk апишечки можно метаинфу собрать до скачивания тела?

?FLERRY?
04.05.2017
14:09:31
ну названия треков и тд - да

вес - нет

Илья
04.05.2017
14:10:12
да ладно :) resp.Header.Get("Content-Length")?

?FLERRY?
04.05.2017
14:10:35
ну или так :D

так

с filereader получилось

Google
Aleksandr
04.05.2017
14:11:52
закачал?

?FLERRY?
04.05.2017
14:11:57
да

эффект тот же, но кода меньше

осталось размер ему давать, чтобы не кушал память

спасибо за помощь :) Отпишусь, как нормально сделаю...

Aleksandr
04.05.2017
14:13:26
если что у меня для тебя уже хак припасен, который я в своенм боте юзаю

?FLERRY?
04.05.2017
14:13:43
кстати, кастануть же string в int64 (байты контент-длинны в int64, требуемый либой) напрямую не получится?

Mike
04.05.2017
14:17:24
atoi ?

?FLERRY?
04.05.2017
14:18:17
точн

Maksim
04.05.2017
14:19:17
strconv.Atoi

?FLERRY?
04.05.2017
14:22:01
Офигеть, ребята. Спасибо огромное!!!

func downloadFile(URL string) (file tgbotapi.FileReader) { fmt.Println("Downloading " + URL + " ...") resp, err := http.Get(URL) if err != nil { fmt.Print(err.Error()) } //defer resp.Body.Close() if err != nil { fmt.Print(err.Error()) } contentLength, _ := strconv.Atoi(resp.Header.Get("Content-Length")) file = tgbotapi.FileReader{Name: "test", Reader: resp.Body, Size: int64(contentLength)} return file }

вот так память вообще не ест

ни метра

❤️

правда надо тело придумать, как закрыть нормально :D

Да, конечно. Эта магия решила все проблемы... Спасибо!

Илья
04.05.2017
14:23:45
сделай структуру, где будет и filereader и тело, тогда, по окончании работы, ты сможешь закрыть тело

Google
Илья
04.05.2017
14:23:48
я так вижу :)

?FLERRY?
04.05.2017
14:24:05
о, точно. Подумаю...

как бы ее назвать только...

тут особо и нет фантазии :D

а, я могу передавать ее в ретурн (тело всмысле). И там закрывать. Ибо выше функция максимально привязанная к архитектуре, а эта - нет :)

?FLERRY?
04.05.2017
14:28:18
будем наводить красоту походу :D

Илья
04.05.2017
14:29:01
https://golang.org/src/strconv/atoi.go?s=4530:4562#L191

кстати да :)

?FLERRY?
04.05.2017
14:29:27
тоже самое почти :D

Aleksey
04.05.2017
14:48:11
Зачем в го указатели нужны?

?FLERRY?
04.05.2017
14:49:01
Зачем в го указатели нужны?
потому что в go все в параметры копируется по значению

допустим, копируя огромные структуры данных, можно очень потерять во времени и памяти

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

Илья
04.05.2017
14:50:22
https://dave.cheney.net/2017/04/26/understand-go-pointers-in-less-than-800-words-or-your-money-back

Aleksey
04.05.2017
15:10:11
Зачем переменная хранит ссылку на другую переменную?

Илья
04.05.2017
15:11:44
это риторический вопрос?

Anton
04.05.2017
15:14:20
Зачем переменная хранит ссылку на другую переменную?
подозреваю, потому что она указатель)

Страница 246 из 1630