Provide some more background on Context
And add a comment about the `Err()` method. Followup on #301
This commit is contained in:
parent
d6b866d2a1
commit
5d8d89d246
@ -1,7 +1,9 @@
|
||||
// In the previous example we looked at setting up a simple
|
||||
// [HTTP server](http-servers). HTTP servers are useful for
|
||||
// demonstrating the usage of `context.Context` for
|
||||
// controlling cancellation.
|
||||
// controlling cancellation. A `Context` carries deadlines,
|
||||
// cancellation signals, and other request-scoped values
|
||||
// across API boundaries and goroutines.
|
||||
package main
|
||||
|
||||
import (
|
||||
@ -28,6 +30,9 @@ func hello(w http.ResponseWriter, req *http.Request) {
|
||||
case <-time.After(10 * time.Second):
|
||||
fmt.Fprintf(w, "hello\n")
|
||||
case <-ctx.Done():
|
||||
// The context's `Err()` method returns an error
|
||||
// that explains why the `Done()` channel was
|
||||
// closed.
|
||||
err := ctx.Err()
|
||||
fmt.Println("server:", err)
|
||||
internalError := http.StatusInternalServerError
|
||||
|
@ -1,2 +1,2 @@
|
||||
5893bc5d4537db64f263a6be8efa9f2cda8ca7d8
|
||||
Elok_mfA6GV
|
||||
e338acce5d0f64d6478be4b886bd24a0fd1a3afa
|
||||
Lun5aFco3pX
|
||||
|
24
public/context
generated
24
public/context
generated
@ -30,11 +30,13 @@
|
||||
<p>In the previous example we looked at setting up a simple
|
||||
<a href="http-servers">HTTP server</a>. HTTP servers are useful for
|
||||
demonstrating the usage of <code>context.Context</code> for
|
||||
controlling cancellation.</p>
|
||||
controlling cancellation. A <code>Context</code> carries deadlines,
|
||||
cancellation signals, and other request-scoped values
|
||||
across API boundaries and goroutines.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/Elok_mfA6GV"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="http://play.golang.org/p/Lun5aFco3pX"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre></div>
|
||||
|
||||
@ -101,7 +103,21 @@ the work and return as soon as possible.</p>
|
||||
<span class="k">case</span> <span class="o"><-</span><span class="nx">time</span><span class="p">.</span><span class="nx">After</span><span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Second</span><span class="p">):</span>
|
||||
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Fprintf</span><span class="p">(</span><span class="nx">w</span><span class="p">,</span> <span class="s">"hello\n"</span><span class="p">)</span>
|
||||
<span class="k">case</span> <span class="o"><-</span><span class="nx">ctx</span><span class="p">.</span><span class="nx">Done</span><span class="p">():</span>
|
||||
<span class="nx">err</span> <span class="o">:=</span> <span class="nx">ctx</span><span class="p">.</span><span class="nx">Err</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>The context’s <code>Err()</code> method returns an error
|
||||
that explains why the <code>Done()</code> channel was
|
||||
closed.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<div class="highlight"><pre> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ctx</span><span class="p">.</span><span class="nx">Err</span><span class="p">()</span>
|
||||
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="s">"server:"</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
|
||||
<span class="nx">internalError</span> <span class="o">:=</span> <span class="nx">http</span><span class="p">.</span><span class="nx">StatusInternalServerError</span>
|
||||
<span class="nx">http</span><span class="p">.</span><span class="nx">Error</span><span class="p">(</span><span class="nx">w</span><span class="p">,</span> <span class="nx">err</span><span class="p">.</span><span class="nx">Error</span><span class="p">(),</span> <span class="nx">internalError</span><span class="p">)</span>
|
||||
@ -189,7 +205,7 @@ cancellation.</p>
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"net/http\"\u000A \"time\"\u000A)\u000A');codeLines.push('func hello(w http.ResponseWriter, req *http.Request) {\u000A');codeLines.push(' ctx := req.Context()\u000A fmt.Println(\"server: hello handler started\")\u000A defer fmt.Println(\"server: hello handler ended\")\u000A');codeLines.push(' select {\u000A case \x3C-time.After(10 * time.Second):\u000A fmt.Fprintf(w, \"hello\\n\")\u000A case \x3C-ctx.Done():\u000A err := ctx.Err()\u000A fmt.Println(\"server:\", err)\u000A internalError := http.StatusInternalServerError\u000A http.Error(w, err.Error(), internalError)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' http.HandleFunc(\"/hello\", hello)\u000A http.ListenAndServe(\":8090\", nil)\u000A}\u000A');codeLines.push('');codeLines.push('');
|
||||
codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"net/http\"\u000A \"time\"\u000A)\u000A');codeLines.push('func hello(w http.ResponseWriter, req *http.Request) {\u000A');codeLines.push(' ctx := req.Context()\u000A fmt.Println(\"server: hello handler started\")\u000A defer fmt.Println(\"server: hello handler ended\")\u000A');codeLines.push(' select {\u000A case \x3C-time.After(10 * time.Second):\u000A fmt.Fprintf(w, \"hello\\n\")\u000A case \x3C-ctx.Done():\u000A');codeLines.push(' err := ctx.Err()\u000A fmt.Println(\"server:\", err)\u000A internalError := http.StatusInternalServerError\u000A http.Error(w, err.Error(), internalError)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' http.HandleFunc(\"/hello\", hello)\u000A http.ListenAndServe(\":8090\", nil)\u000A}\u000A');codeLines.push('');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
Loading…
x
Reference in New Issue
Block a user