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

View File

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

View File

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

View File

@ -40,7 +40,7 @@ branches.</p>
</td> </td>
<td class="code leading"> <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> <div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span>
</pre></div> </pre></div>
@ -80,7 +80,7 @@ branches.</p>
<td class="code leading"> <td class="code leading">
<div class="highlight"><pre> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">2</span> <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">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="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> <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> <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="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="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> <span class="p">}</span>
</pre></div> </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> <code>case</code> expressions can be non-constants.</p>
</td> </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> <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">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="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="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> <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> <span class="p">}</span>
</pre></div> </pre></div>
@ -147,9 +175,12 @@ to express if/else logic. Here we also show how the
<td class="code"> <td class="code">
<div class="highlight"><pre><span class="gp">$</span> go run switch.go <div class="highlight"><pre><span class="gp">$</span> go run switch.go
<span class="go">write 2 as two</span> <span class="go">Write 2 as two</span>
<span class="go">it&#39;s the weekend</span> <span class="go">It&#39;s a weekday</span>
<span class="go">it&#39;s before noon</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> </pre></div>
</td> </td>