Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Go conference 2017 Lightning talk

1,631 views

Published on

2017年3月25日に開催されたGo conference 2017のLTで発表した資料だよ!
context.WithValue()、うまく使ってみようね

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Go conference 2017 Lightning talk

  1. 1. Go 1.7のContextを net/httpで使ってみた Go conference 2017 @fkm / @mokelab
  2. 2. ● スマホアプリを書いたり ● レクチャーしたり ● 情報発信したり 何やってるの?
  3. 3. ● グッズもあるよ♪ 何やってるの?
  4. 4. Context とは?
  5. 5. リクエストの キャンセル用 インターフェース
  6. 6. は、@lestrratさんが きっと説明済み。。。
  7. 7. そのリクエストに 関するデータを 保存できる
  8. 8. WithValue()
  9. 9. c := r.Context() c = context.WithValue( c, "name", // キー "moke", // 値 ) いれる
  10. 10. c := r.Context() name := c.Value("name") // nameは // interface{} or nil とってくる
  11. 11. // interface{}なので。。。 name, ok := c.Value("name").(string) if !ok { // エラーレスポンス } とってくる
  12. 12. 現実の 課題
  13. 13. func myHandler(w, r) { contentType := ... auth := ... accept := ... // メインの処理 } とあるHandler
  14. 14. func getUserHandler(w, r) { contentType := ... auth := ... accept := ... // メインの処理 } 別のHandler 前処理
  15. 15. こんな風にしたい Request 前処理 メインの 処理 エラー インターフェースが 変わる(><)
  16. 16. Contextの出番 Request 前処理 メインの 処理 インターフェースは そのまま Context
  17. 17. ライブラリ書いてみた
  18. 18. イメージ Request メインの 処理 Context 取得 書き込み
  19. 19. リクエストに 関する情報だけ いれるべし
  20. 20. // GET /users/{id} 用 handler := hop.Operations( hop.GetContentType, hop.GetPathString("id"), )(mainHandler) コードは?
  21. 21. // getter関数で // 前処理の結果を取ってくる func mainHandler(w, r) { contentType := hop.ContentType(r.Context()) ... } コードは?
  22. 22. handler := hop.Operations( hop.GetContentType, hop.GetPathString("id"), )(mainHandler) 何がいいの? 関数!
  23. 23. intとかstringとかいれると 怒られるよ $ golint main.go:10:6: should not use basic type string as key in context.WithValue WithValueのキー
  24. 24. 別名をつければいいよ type cKey string const keyID cKey = "id" c = context.WithValue(c, keyID, "id1234") WithValueのキー
  25. 25. 素敵な Contextライフを!

×