title: Why am I getting a compile error 'cannot use ... as type uint8 in argument to ...' when the parameter is an int
body: <p>I am new to Go and was working through a problem in The Go Programming Language. The code should create GIF animations out of random Lissajous figures with the images being produced in the different colors from <code>palate</code>:</p>
  
  <pre><code>// Copyright © 2016 Alan A. A. Donovan &amp; Brian W. Kernighan.
  // License: https://creativecommons.org/licenses/by-nc-sa/4.0/
  
  // Run with "web" command-line argument for web server.
  // See page 13.
  //!+main
  
  // Lissajous generates GIF animations of random Lissajous figures.
  package main
  
  import (
      "image"
      "image/color"
      "image/gif"
      "io"
      "math"
      "math/rand"
      "os"
  )
  
  //!-main
  // Packages not needed by version in book.
  import (
      "log"
      "net/http"
      "time"
  )
  
  //!+main
  // #00ff55
  var palette = []color.Color{color.RGBA{0x00, 0xff, 0x55, 0xFF}, color.Black, color.RGBA{0x00, 0x00, 0xff, 0xFF}, color.RGBA{0xff, 0x00, 0xff, 0xFF}}
  
  const (
      whiteIndex = 0 // first color in palette
  )
  
  func main() {
      //!-main
      // The sequence of images is deterministic unless we seed
      // the pseudo-random number generator using the current time.
      // Thanks to Randall McPherson for pointing out the omission.
      rand.Seed(time.Now().UTC().UnixNano())
  
      if len(os.Args) &gt; 1 &amp;&amp; os.Args[1] == "web" {
          //!+http
          handler := func(w http.ResponseWriter, r *http.Request) {
              lissajous(w)
          }
          http.HandleFunc("/", handler)
          //!-http
          log.Fatal(http.ListenAndServe("localhost:8000", nil))
          return
      }
      //!+main
      lissajous(os.Stdout)
  }
  
  func lissajous(out io.Writer) {
      const (
          cycles  = 5     // number of complete x oscillator revolutions
          res     = 0.001 // angular resolution
          size    = 100   // image canvas covers [-size..+size]
          nframes = 64    // number of animation frames
          delay   = 8     // delay between frames in 10ms units
      )
      freq := rand.Float64() * 3.0 // relative frequency of y oscillator
      anim := gif.GIF{LoopCount: nframes}
      phase := 0.0 // phase difference
    colorIndex := 2
    for i := 0; i &lt; nframes; i++ {
      rect := image.Rect(0, 0, 2*size+1, 2*size+1)
          img := image.NewPaletted(rect, palette)
          for t := 0.0; t &lt; cycles*2*math.Pi; t += res {
              x := math.Sin(t)
              y := math.Sin(t*freq + phase)
        img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5), colorIndex)
        colorIndex++
          }
          phase += 0.1
          anim.Delay = append(anim.Delay, delay)
          anim.Image = append(anim.Image, img)
      }
      gif.EncodeAll(out, &amp;anim) // NOTE: ignoring encoding errors
  }
  
  //!-main
  </code></pre>
  
  <p>Here is the error I am getting</p>
  
  <pre><code>lissajous/main.go:76: cannot use colorIndex (type int) as type uint8 in argument to img.SetColorIndex
  </code></pre>
  
  <p>Is there a difference between int and uint8 types or something?</p>