
Roman
28.01.2017
17:32:01
а ключики пробовал включать - -ldflags="-s -w"
народ еще upx рекомендует потыркать
*врядли в 1.8 прям уменьшат выхлоп, не особо нужно
где? https://beta.golang.org/doc/go1.8

Google

Roman
28.01.2017
17:36:04
да проще поставить попробовать
можно и не ставить кстати https://hub.docker.com/_/golang/

Мерлин
28.01.2017
17:37:53
А я прошу прощения, это где вы сервис запускаете, что лишних три мегабайта - это много?

Roman
28.01.2017
17:38:02
у него не сервис
этож Гарин
да вообще ни слова
наоборот пытаюсь помочь
docker run —rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.8 go build -v
экспериментируй

Мерлин
28.01.2017
17:40:18
мулварь пишешь, паразит? ?
Хороший задачи и админки интересные
Советую посмотреть upx :3

Roman
28.01.2017
17:44:41
смылся

Google

Мерлин
28.01.2017
17:44:45
https://blog.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/

Roman
28.01.2017
17:44:56
переходи на си
на плюсы

Мерлин
28.01.2017
17:45:12
А сколько в результате получается?

Roman
28.01.2017
17:45:16
го не будет мелким

Peter
28.01.2017
17:45:33
ващета мы и пишем на чем-то таком, но мелочт всякие предпочитаем на чем-то вроде пхп. или гоу

Roman
28.01.2017
17:45:50
у него ниша такая что пока там на размер всем начхать

Мерлин
28.01.2017
17:46:20
Да

Roman
28.01.2017
17:46:21
вот очередные хипстеры эмбед какой нить и начнут на го колбасить тогда может

Мерлин
28.01.2017
17:47:53
Руст попробуйте

Roman
28.01.2017
17:48:19
эт кстати не только в го
http://stackoverflow.com/questions/29008127/why-are-rust-executables-so-huge

Мерлин
28.01.2017
17:48:55
Это какие вам либы нужны?
Хотя да

Roman
28.01.2017
17:49:25
вон в расте можно динамическую линковку включить
но тогда будешь зависить от либ
в общем все как в той задаче про два стула

Мерлин
28.01.2017
17:49:52

Google

Мерлин
28.01.2017
17:50:06

Roman
28.01.2017
17:50:16
баш тогда уже
бери баш и ебаш
или Гарин ты под винды тоже собираешь?

Slava
28.01.2017
17:51:01
коллеги, вы через чур перевозбуждены, это на вас так слово пхп подействовало?

Мерлин
28.01.2017
17:51:11

Roman
28.01.2017
17:52:59

Peter
28.01.2017
18:43:51
и было бы вам щасте
если че, этот хуй фебс. будьте осторожны

Sergey
29.01.2017
07:58:28
Да ладно вам, пхп вполне себе норм


Slach
29.01.2017
08:34:50
всем привет, а объясните пожалуйста
насколько плохо объявлять некий глобальный контекст при обработке http handlers на golang??
не middleware а именно контект
в общем мне надо чтобы несколько горутин писали в один файл в append режиме
и при достижении глобального (g.writed_rows % g.chunk_size) == 0
происходил flush файла
закрытие дескриптора
и создание друого файла (открытие в append режиме)
пытаюсь сделать как то так
в качестве фреймворка использую https://github.com/gocraft/web (первое что попалось на глаза когда начал гуглить golang lightweight web framework)
type MyStruct struct {
sync.RWMutex
// дальше много полей всякие file handlers и map
tsv_writer *csv.Writer
tsv_file *os.File
tsv_file_name string
writed_rows uint
chunk_size uint
}
а в обработчике
func (g *MyStruct) Collect(rw web.ResponseWriter, req *web.Request) {
}
делаю как то так
https://play.golang.org/p/StfrROogbk
пытаюсь юзать
g.Lock и g.Unlock
при записи в g
а у меня пока получается
что в бенчмарке
func Benchmark_Collect(b *testing.B) {
g := NewMyStruct()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
req := NewTestRequest()
rw := web.ResponseWriter(testResponseWriter{})
for pb.Next() {
g.Collect(rw, &req)
}
})
}
переименование файла и открытие закрытие пытается делаться паралелльно =(
кто нибудь может меня платно проконсультировать и поревьювить мой код более дотошно?

Admin
ERROR: S client not available

Givi
29.01.2017
09:01:19
"в общем мне надо чтобы несколько горутин писали в один файл в append режиме" создаёшь буферизированный канал, раздаёшь его горутинам-обработчикам запросов, они туда пишут данные, запускаешь одну единственную горутину, которая, пишет в файл в нужном тебе режиме, переименовывает и т.д.
в чём сложности?

Slach
29.01.2017
09:02:29
там по коду есть условие что разные запросы могут менять схему записи в CSV

Givi
29.01.2017
09:05:17
объяви структуру из двух полей, данные и мета, и вместо сырых данных гоняй эту структуру, в мета указывай как должны данные сохранятся.

Daniel
29.01.2017
09:25:34
Вот да

Slach
29.01.2017
09:26:04
проблема в том что надо "мету" менять атомарно
в разных горутинах

Daniel
29.01.2017
09:26:17
А?

Google

Daniel
29.01.2017
09:26:27
Это же невозможно

Slach
29.01.2017
09:27:54
что невозможно???
в разных горутинах одну мапу поменять?

Daniel
29.01.2017
09:30:24
Ну давайте разберемся
Что такое атомарно
И как это соотносится с асинхронными процессами


Slach
29.01.2017
09:40:26
ок =) сейчас поясню
вот есть две горутины которые запускают Collect паралельно
в них на вход идет два разных экземлпяра структуры web.Request
они содержат разный (но пересекующийся в части ключей) набор полей
в каждой горутине Collect
я хочу менять глобальную g.form_k_exists_map map[string]bool и добавлять по мере необходимости глобальный слайс
сейчас юзается вот такой код
for k := range req.Form {
g.RLock()
_, f_exists := g.form_k_exists_map[k]
_, ga_exists := GA_map[k]
g.RUnlock()
if !f_exists && ga_exists {
refresh_schema = refreshCSVShemaWithFormKey(refresh_schema, g, k) || refresh_schema
}
if !f_exists && !ga_exists {
refresh_schema = refreshCSVShemaWithComplexKey(refresh_schema, g, k) || refresh_schema
}
}
внутри refreshCSVShema* функций я юзаю g.Lock перед записью и g.Unlock
и такое ощущение что либо забыл где то вызвать
либо
потому что мапа form_k_exists_map какое то не то значение содержит
предлагаете этот код в отдельную горутину закинуть? и общаться с ней через буфферизированный канал?


Daniel
29.01.2017
09:50:13
Так
Давайте через час?
Я до компа дойду

Slach
29.01.2017
09:50:56
без проблем, Данил сколько стоит 2-3 часа вашего времени?

Daniel
29.01.2017
09:51:18
Именно моего - 2тр в час
Но я тут не вижу пространства для оплаты :)
Я думаю - за 15 минут разберемся
так, я тут
давайте разбираться
вот у нас функция обработки http запроса