title: confusion about convert `uint8` to `int8`
body: <p>I want to convert <code>uint8</code> to <code>int</code>, so I write a const <code>0xfc</code>, and try to use <code>int8(0xfc)</code> to convert it. However the code raises an error:</p>
  
  <pre class="lang-golang prettyprint-override"><code>package main
  
  import (
      "fmt"
  )
  
  func main() {
      a := int8(0xfc)  // compile error: constant 252 overflows int8
      b := a
      fmt.Println(b)
  }
  </code></pre>
  
  <p>But if I defer the type conversion after assignment, the code can work around.</p>
  
  <pre class="lang-golang prettyprint-override"><code>package main
  
  import (
      "fmt"
  )
  
  func main() {
      a := 0xfc
      b := int8(a)  // ok
      fmt.Println(b)
  }
  </code></pre>
  
  <p>My question: </p>
  
  <ul>
  <li>Is there any difference between these two codes?</li>
  <li>Why does the first one raise a compile error?</li>
  </ul>