Telegram Group & Telegram Channel
Note #12: defer statements in infinite loops

Длинный стек отложенных вызовов может занимать много памяти, как Вы уже догадались такой код будет стремительно течь 💦:

$ cat main.go

package main

func g()

func f() {
for {
defer g()
}
}

func main() {
f()
}


Отловить данную проблему поможет статический анализатор:

deferlint:
go vet -vettool=$(which deferlint) .
# github.com/andriisoldatenko/us/🇺🇦 Go на двоих/com.golang_for_two
./main.go:10:4: defer in loop found "defer g()"


либо staticcheck
staticcheck
main.go:10:4: defers in this infinite loop will never run (SA5003)


Иногда данная ситуация абсолютно валидная, поэтому staticcheck пытается найти циклы без условий или брейков, чтобы отметить такой кейс, это помогает бороться с ложными срабатываниями.

Кстати, deferlint - отличный пример, как написать свой линтер[1].
Исправить данную ситуацию возможно, обернув defer в анонимную функцию, чтобы гарантированно ваша отложенная функция была вызвана вовремя.

func f() {
for {
func(){
defer g()
}()
}
}


Потенциально, любой цикл, а особенно бесконечный, может служить причиной утечки памяти. defer следует гарантированно выполнять сразу же после того, как мы освободили ресурс, который нам уже больше не нужен. А иногда - это может происходить в цикле.

Links:
[1] Если вдруг вы пропустили статью о том, как написать свой линтер использую go/analysis, то вот https://arslan.io/2019/06/13/using-go-analysis-to-write-a-custom-linter/



tg-me.com/golang_for_two/36
Create:
Last Update:

Note #12: defer statements in infinite loops

Длинный стек отложенных вызовов может занимать много памяти, как Вы уже догадались такой код будет стремительно течь 💦:

$ cat main.go

package main

func g()

func f() {
for {
defer g()
}
}

func main() {
f()
}


Отловить данную проблему поможет статический анализатор:

deferlint:
go vet -vettool=$(which deferlint) .
# github.com/andriisoldatenko/us/🇺🇦 Go на двоих/com.golang_for_two
./main.go:10:4: defer in loop found "defer g()"


либо staticcheck
staticcheck
main.go:10:4: defers in this infinite loop will never run (SA5003)


Иногда данная ситуация абсолютно валидная, поэтому staticcheck пытается найти циклы без условий или брейков, чтобы отметить такой кейс, это помогает бороться с ложными срабатываниями.

Кстати, deferlint - отличный пример, как написать свой линтер[1].
Исправить данную ситуацию возможно, обернув defer в анонимную функцию, чтобы гарантированно ваша отложенная функция была вызвана вовремя.

func f() {
for {
func(){
defer g()
}()
}
}


Потенциально, любой цикл, а особенно бесконечный, может служить причиной утечки памяти. defer следует гарантированно выполнять сразу же после того, как мы освободили ресурс, который нам уже больше не нужен. А иногда - это может происходить в цикле.

Links:
[1] Если вдруг вы пропустили статью о том, как написать свой линтер использую go/analysis, то вот https://arslan.io/2019/06/13/using-go-analysis-to-write-a-custom-linter/

BY 🇺🇦 Go for two :)


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/golang_for_two/36

View MORE
Open in Telegram


🇺🇦 Go на двоих Telegram | DID YOU KNOW?

Date: |

Telegram Be The Next Best SPAC

I have no inside knowledge of a potential stock listing of the popular anti-Whatsapp messaging app, Telegram. But I know this much, judging by most people I talk to, especially crypto investors, if Telegram ever went public, people would gobble it up. I know I would. I’m waiting for it. So is Sergei Sergienko, who claims he owns $800,000 of Telegram’s pre-initial coin offering (ICO) tokens. “If Telegram does a SPAC IPO, there would be demand for this issue. It would probably outstrip the interest we saw during the ICO. Why? Because as of right now Telegram looks like a liberal application that can accept anyone - right after WhatsApp and others have turn on the censorship,” he says.

Telegram Auto-Delete Messages in Any Chat

Some messages aren’t supposed to last forever. There are some Telegram groups and conversations where it’s best if messages are automatically deleted in a day or a week. Here’s how to auto-delete messages in any Telegram chat. You can enable the auto-delete feature on a per-chat basis. It works for both one-on-one conversations and group chats. Previously, you needed to use the Secret Chat feature to automatically delete messages after a set time. At the time of writing, you can choose to automatically delete messages after a day or a week. Telegram starts the timer once they are sent, not after they are read. This won’t affect the messages that were sent before enabling the feature.

🇺🇦 Go на двоих from us


Telegram 🇺🇦 Go for two :)
FROM USA