--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Если брать обычное понимание фразы "утечка памяти", то в Go добиться ее не так-то просто. Ведь GC подберет всю память, на которую уже нет ссылок. Придется использовать unsafe, cgo и вызов malloc, например.Другое дело что вы можете написать такую программу, которая не будет "освобождать" какие-то ресурсы. Например вы создаете слайсы, добавляете их в какой-то глобальный слайс, а забываете оттуда удалять то, что уже не нужно. Это будет не совсем утечка в классическом понимании, но потребление памяти у вас будет неконтролируемо расти.
On Wed, Jan 25, 2017 at 2:05 PM Andrey Velikoredchanin <uncle...@gmail.com> wrote:
Всем привет!
Можете подсказать где найти информацию о том, какие приемы могут вызывать потенциальные утечки памяти?
Спасибо.
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+unsubscribe@googlegroups.com.
Т.е. в golang под "освобождением памяти" понимается либо потеря контекста соответствующей переменной либо ее об-nil-ение? Даже если создается канал через make, если на него больше нет ссылок он будет освобожден?25 января 2017 г., 15:41 пользователь ma...@kevac.org <ma...@kevac.org> написал:
Если брать обычное понимание фразы "утечка памяти", то в Go добиться ее не так-то просто. Ведь GC подберет всю память, на которую уже нет ссылок. Придется использовать unsafe, cgo и вызов malloc, например.Другое дело что вы можете написать такую программу, которая не будет "освобождать" какие-то ресурсы. Например вы создаете слайсы, добавляете их в какой-то глобальный слайс, а забываете оттуда удалять то, что уже не нужно. Это будет не совсем утечка в классическом понимании, но потребление памяти у вас будет неконтролируемо расти.
On Wed, Jan 25, 2017 at 2:05 PM Andrey Velikoredchanin <uncle...@gmail.com> wrote:
Всем привет!
Можете подсказать где найти информацию о том, какие приемы могут вызывать потенциальные утечки памяти?
Спасибо.
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
ctx, cancel := context.WithTimeout(ctx, config.Timeout)
defer cancel()
type Result {Value Type; Err error}
result := make(chan Result)
go func() {
defer func() {
if r := recover(); r != nil {
result <- Result{Err: fmt.Errf("panic: %s\n%s", r, debug.Stack())}
}
}
res, err := foo() // Can panic.
select {
case result <- Result{res, err}:
case <-ctx.Done():
// Нельзя использовать default: читающая горутина может не успеть
// войти в select к моменту записи. В таком случае, результат будет выкинут
// а читающая горутина об этом не узнает.
}
}()
baz() // Can panic.
select {
case res <- result:
return res.Value, res.Err
case <-ctx.Done():
resturn nil, ctx.Err()
}