Edits and generation for type switch update

This commit is contained in:
Mark McGranaghan 2016-12-27 12:41:21 -08:00
parent bee8f55277
commit a3b3bff8cb
4 changed files with 61 additions and 30 deletions

View File

@ -10,7 +10,7 @@ func main() {
// Here's a basic `switch`.
i := 2
fmt.Print("write ", i, " as ")
fmt.Print("Write ", i, " as ")
switch i {
case 1:
fmt.Println("one")
@ -25,9 +25,9 @@ func main() {
// `default` case in this example as well.
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("it's the weekend")
fmt.Println("It's the weekend")
default:
fmt.Println("it's a weekday")
fmt.Println("It's a weekday")
}
// `switch` without an expression is an alternate way
@ -36,26 +36,26 @@ func main() {
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("it's before noon")
fmt.Println("It's before noon")
default:
fmt.Println("it's after noon")
fmt.Println("It's after noon")
}
// A type `switch` compares types instead of values. You
// can use this to discover the the type of an interface
// value. In this example, the variable `t` will have the
// type corresponding to its clause.
whatAmI := func(i interface{}) string {
whatAmI := func(i interface{}) {
switch t := i.(type) {
case bool:
return "I am a bool"
fmt.Println("I'm a bool")
case int:
return "I am an int"
fmt.Println("I'm an int")
default:
return fmt.Sprintf("Can't handle type %T", t)
fmt.Printf("Don't know type %T\n", t)
}
}
fmt.Println(whatAmI(1))
fmt.Println(whatAmI(true))
fmt.Println(whatAmI("hey"))
whatAmI(true)
whatAmI(1)
whatAmI("hey")
}

View File

@ -1,2 +1,2 @@
1040d0721b871f78f221a0e9e4a61ea3b0e6de70
8b5CajPcHn
d255a1fe931fe471b745aeb66830b10216617479
kxkBPpY_ue

View File

@ -1,7 +1,7 @@
$ go run switch.go
write 2 as two
it's the weekend
it's before noon
I am an int
I am a bool
Can't handle type string
Write 2 as two
It's a weekday
It's after noon
I'm a bool
I'm an int
Don't know type string

View File

@ -40,7 +40,7 @@ branches.</p>
</td>
<td class="code leading">
<a href="http://play.golang.org/p/8b5CajPcHn"><img title="Run code" src="play.png" class="run" /></a>
<a href="http://play.golang.org/p/kxkBPpY_ue"><img title="Run code" src="play.png" class="run" /></a>
<div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span>
</pre></div>
@ -80,7 +80,7 @@ branches.</p>
<td class="code leading">
<div class="highlight"><pre> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">2</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Print</span><span class="p">(</span><span class="s">&quot;write &quot;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="s">&quot; as &quot;</span><span class="p">)</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Print</span><span class="p">(</span><span class="s">&quot;Write &quot;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="s">&quot; as &quot;</span><span class="p">)</span>
<span class="k">switch</span> <span class="nx">i</span> <span class="p">{</span>
<span class="k">case</span> <span class="mi">1</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">&quot;one&quot;</span><span class="p">)</span>
@ -105,9 +105,9 @@ in the same <code>case</code> statement. We use the optional
<div class="highlight"><pre> <span class="k">switch</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Now</span><span class="p">().</span><span class="nx">Weekday</span><span class="p">()</span> <span class="p">{</span>
<span class="k">case</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Saturday</span><span class="p">,</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Sunday</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">&quot;it&#39;s the weekend&quot;</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">&quot;It&#39;s the weekend&quot;</span><span class="p">)</span>
<span class="k">default</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">&quot;it&#39;s a weekday&quot;</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">&quot;It&#39;s a weekday&quot;</span><span class="p">)</span>
<span class="p">}</span>
</pre></div>
@ -121,15 +121,43 @@ to express if/else logic. Here we also show how the
<code>case</code> expressions can be non-constants.</p>
</td>
<td class="code">
<td class="code leading">
<div class="highlight"><pre> <span class="nx">t</span> <span class="o">:=</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Now</span><span class="p">()</span>
<span class="k">switch</span> <span class="p">{</span>
<span class="k">case</span> <span class="nx">t</span><span class="p">.</span><span class="nx">Hour</span><span class="p">()</span> <span class="p">&lt;</span> <span class="mi">12</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">&quot;it&#39;s before noon&quot;</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">&quot;It&#39;s before noon&quot;</span><span class="p">)</span>
<span class="k">default</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">&quot;it&#39;s after noon&quot;</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">&quot;It&#39;s after noon&quot;</span><span class="p">)</span>
<span class="p">}</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<p>A type <code>switch</code> compares types instead of values. You
can use this to discover the the type of an interface
value. In this example, the variable <code>t</code> will have the
type corresponding to its clause.</p>
</td>
<td class="code">
<div class="highlight"><pre> <span class="nx">whatAmI</span> <span class="o">:=</span> <span class="kd">func</span><span class="p">(</span><span class="nx">i</span> <span class="kd">interface</span><span class="p">{})</span> <span class="p">{</span>
<span class="k">switch</span> <span class="nx">t</span> <span class="o">:=</span> <span class="nx">i</span><span class="p">.(</span><span class="kd">type</span><span class="p">)</span> <span class="p">{</span>
<span class="k">case</span> <span class="kt">bool</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">&quot;I&#39;m a bool&quot;</span><span class="p">)</span>
<span class="k">case</span> <span class="kt">int</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">&quot;I&#39;m an int&quot;</span><span class="p">)</span>
<span class="k">default</span><span class="p">:</span>
<span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">&quot;Don&#39;t know type %T\n&quot;</span><span class="p">,</span> <span class="nx">t</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nx">whatAmI</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="nx">whatAmI</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="nx">whatAmI</span><span class="p">(</span><span class="s">&quot;hey&quot;</span><span class="p">)</span>
<span class="p">}</span>
</pre></div>
@ -147,9 +175,12 @@ to express if/else logic. Here we also show how the
<td class="code">
<div class="highlight"><pre><span class="gp">$</span> go run switch.go
<span class="go">write 2 as two</span>
<span class="go">it&#39;s the weekend</span>
<span class="go">it&#39;s before noon</span>
<span class="go">Write 2 as two</span>
<span class="go">It&#39;s a weekday</span>
<span class="go">It&#39;s after noon</span>
<span class="go">I&#39;m a bool</span>
<span class="go">I&#39;m an int</span>
<span class="go">Don&#39;t know type string</span>
</pre></div>
</td>