wantedly / gophers-code-reading-party

ʕ ◔ϖ◔ʔ
2 stars 2 forks source link

20190904 Gophers Code Reading Party #24

Open izumin5210 opened 5 years ago

izumin5210 commented 5 years ago

201909041900 ~ @ 5F Lounge, Wantedly, Inc. Tokyo HQ

WHY

Go 完全に理解したい

WHAT

とりあえず読みたいものを書いていきましょう!

izumin5210 commented 5 years ago

なんで (*http.Response).Body().Close() を呼び忘れると goroutine がリークしまくってひどいことになるのか、コードを読んで理解する

izumin5210 commented 5 years ago

Semantic Import Versioning

rerost commented 5 years ago

DIする際contextの扱い方が悩ましい。go-redisかredigoのどちらを使えば良いか

気になっている点

メジャーなRedisクライアントとしては次の2つがある。

ここで、僕はgo-redisを使っている。 ただ、contextの渡し方として、client.WithContext(ctx)というのがある https://godoc.org/github.com/go-redis/redis#Client.WithContext

僕の考えている解決したい点は次の2つ

  1. 問い合わせ時のContextを含めたい(= pluginのレイヤーにcontextを伝えたい)
    • 注: これはサーバー起動時のcontextではない
  2. DI時に何を渡せばよいか自明じゃない
    • 例: Client?Clientを作る関数?

この2つがredigoで解決できるかどうか。

結論

Poolを生成する際に、DialContext(ctx)というのが渡せる。ここで実行時のctx付きでhookすることができる。 また、pool.GetContext(ctx)を呼ぶことで、ctxのConnectionが返る。

これらは @.izumin5210 によるもの。

なので、僕の疑問点はredigoでは

  1. 問い合わせ時のContextを含めたい(= pluginのレイヤーにcontextを伝えたい)
    • GetContext(ctx)でconnectionを生成することで解決
  2. DI時に何を渡せばよいか自明じゃない
    • Poolを渡して使う際にGetContextをすれば良い

となり解決した