Size: a a a

2020 June 12

ЗА

Заур Ашурбеков... in Go-go!
Ошибка прям с первого запроса или какие-то запросы проходят
источник

S

Serj in Go-go!
читаю книгу Саммерфильда и возникло 3 вопроса.
https://github.com/Raymond0331/goeg/blob/master/ch01/stacker/stack/stack.go#L21

1. при указании типа для параметра interface{} - можно считать, что передаваемое значение может быть любым? т.е. interface{} обеспечивает передачу любых значений, будь то int или string? если да, то почему это реализовано таким образом, при помощи указания типа interface?
2. почему у параметра типа interface указываются брейсы {} ? зачем это нужно? про пустой интерфейс я знаю, но почему просто не указывать interface
3. на стр. 22 указывается *stack = append(*stack, x), в книге не даётся пояснение, почему после аппенда происходит присвоение, еще и через указатель. append и так же запихнет x в *stack, зачем указывать присвоение?
источник

J

Jefferson in Go-go!
Заур Ашурбеков
Ошибка прям с первого запроса или какие-то запросы проходят
Около 6к запросов отправляется без ошибок
источник

s

sexst in Go-go!
Jefferson
Переделал. В main() создаю клиент, пишу его в глобальную переменную. Всё так же ловлю ошибку
MaxIdleConns теперь указан?
источник

J

Jefferson in Go-go!
источник

J

Jefferson in Go-go!
sexst
MaxIdleConns теперь указан?
Нет, сейчас попробую указать
источник

s

sexst in Go-go!
Jefferson
Нет, сейчас попробую указать
Ну тогда ожидаемый результат
источник

s

sexst in Go-go!
Если указать, то единственный вариант схватить ошибку - скормить задачи с такой скоростью, что горутины не будут успевать ответы получать, а клиент закрывать сокеты
источник

J

Jefferson in Go-go!
Не совсем понимаю, сколько нужно указать в MaxIdleConns?
источник

s

sexst in Go-go!
Горутины то можно тысячами быстрее наплодить чем по сети ответ пришлют даже на первый запрос. Тут уже можно решить только ограничением количества живых в один момент времени горутин. Совсем Go-way, наверное, - наплодить 100-200-1000 горутин-поллеров и через канал заливать в них задачи. Тогда количество сокетов будет однозначно контролируемо и не будет зависеть от сетевого latency
источник

s

sexst in Go-go!
Jefferson
Не совсем понимаю, сколько нужно указать в MaxIdleConns?
да хоть 10
источник

J

Jefferson in Go-go!
Ошибка та же. Сейчас попробую ещё слип поставить
источник

ЗА

Заур Ашурбеков... in Go-go!
Serj
читаю книгу Саммерфильда и возникло 3 вопроса.
https://github.com/Raymond0331/goeg/blob/master/ch01/stacker/stack/stack.go#L21

1. при указании типа для параметра interface{} - можно считать, что передаваемое значение может быть любым? т.е. interface{} обеспечивает передачу любых значений, будь то int или string? если да, то почему это реализовано таким образом, при помощи указания типа interface?
2. почему у параметра типа interface указываются брейсы {} ? зачем это нужно? про пустой интерфейс я знаю, но почему просто не указывать interface
3. на стр. 22 указывается *stack = append(*stack, x), в книге не даётся пояснение, почему после аппенда происходит присвоение, еще и через указатель. append и так же запихнет x в *stack, зачем указывать присвоение?
1) да, это часть утиной типизации. просто пустой интефрейс. Это самый обычный интерфейс, для которого подходят все типы, потому что нет требований к объявленным методам.
2) Это же тоже самое, что написать
func SomeFn(i interface{
   SomeMethod()
})

просто без методов

3) аппенд не добавляет в *stack, а возвращает новый слайс, который мы присваиваем переменной *stack. Если за присваиванием будет другая переменная, *stack никак не изменится. А указатель потому что в коде скорее всего stack это указатель на слайс, а не сам слайс. Нам нужно перейти по адресу и уже работать с самим слайсом
источник

ЗА

Заур Ашурбеков... in Go-go!
Jefferson
Ошибка та же. Сейчас попробую ещё слип поставить
То ли мы у тебя в коде чего-то не знаем, то ли у тя в системе просто все уже занято
источник

J

Jefferson in Go-go!
Заур Ашурбеков
То ли мы у тебя в коде чего-то не знаем, то ли у тя в системе просто все уже занято
Если в терминале ввести ulimit -n 999999, то всё норм
источник

S

Serj in Go-go!
Заур Ашурбеков
1) да, это часть утиной типизации. просто пустой интефрейс. Это самый обычный интерфейс, для которого подходят все типы, потому что нет требований к объявленным методам.
2) Это же тоже самое, что написать
func SomeFn(i interface{
   SomeMethod()
})

просто без методов

3) аппенд не добавляет в *stack, а возвращает новый слайс, который мы присваиваем переменной *stack. Если за присваиванием будет другая переменная, *stack никак не изменится. А указатель потому что в коде скорее всего stack это указатель на слайс, а не сам слайс. Нам нужно перейти по адресу и уже работать с самим слайсом
большое спасибо. насчет аппенда посмотрел еще в доке, прочитал там комментарий. осознал этот момент.
интерфейс пока сложно понять мне, буду разбираться с ним. я понял из твоих слов, почему так, но почему оно так работает  - понять пока сложно) го - другой мир,  и правда
мб допру во время практики
источник

DY

Dmitry Yaremenko in Go-go!
подскажите как в темплейте сделать + 1? у меня там идет цикл и я вывожу индекс, но мне нужно чтобы он с 1 начинался
источник

ЗА

Заур Ашурбеков... in Go-go!
Jefferson
Если в терминале ввести ulimit -n 999999, то всё норм
Народ, а какое в среднем ограничение на юзера в линуксе?
источник

ЗА

Заур Ашурбеков... in Go-go!
Serj
большое спасибо. насчет аппенда посмотрел еще в доке, прочитал там комментарий. осознал этот момент.
интерфейс пока сложно понять мне, буду разбираться с ним. я понял из твоих слов, почему так, но почему оно так работает  - понять пока сложно) го - другой мир,  и правда
мб допру во время практики
👍👍
источник

ЛА

Локоть Анатолий... in Go-go!
Dmitry Yaremenko
подскажите как в темплейте сделать + 1? у меня там идет цикл и я вывожу индекс, но мне нужно чтобы он с 1 начинался
Добавиь в шаблон функцию инкремента, например https://stackoverflow.com/questions/25689829/arithmetic-in-go-templates
источник