Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Nächste SlideShare
Coding in the context era
Coding in the context era
Wird geladen in …3
×
1 von 26

Go conference 2017 Lightning talk

0

Teilen

Herunterladen, um offline zu lesen

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

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

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ライフを!

×