O slideshow foi denunciado.

Go conference 2017 Lightning talk

0

Compartilhar

Próximos SlideShares
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
Carregando em…3
×
1 de 26
1 de 26

Mais Conteúdo rRelacionado

Audiolivros relacionados

Gratuito durante 14 dias do Scribd

Ver tudo

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

×