title: What is the meaning of "...Type" in Go?
body: <p>This code is in <code>builti.go</code>:</p>
  
  <pre><code>// The append built-in function appends elements to the end of a slice. If
  // it has sufficient capacity, the destination is resliced to accommodate the
  // new elements. If it does not, a new underlying array will be allocated.
  // Append returns the updated slice. It is therefore necessary to store the
  // result of append, often in the variable holding the slice itself:
  //  slice = append(slice, elem1, elem2)
  //  slice = append(slice, anotherSlice...)
  // As a special case, it is legal to append a string to a byte slice, like this:
  //  slice = append([]byte("hello "), "world"...)
  func append(slice []Type, elems ...Type) []Type
  </code></pre>
  
  <p>The last line made me feel very confused. I do not know the meaning of <code>...Type</code> .</p>
  
  <p>These are other codes:</p>
  
  <pre><code>package main
  
  import "fmt"
  
  func main() {
     s := []int{1,2,3,4,5}
     s1 := s[:2]
     s2 := s[2:]
     s3 := append(s1, s2...)
     fmt.Println(s1, s2, s3)
  }
  </code></pre>
  
  <p>The result is</p>
  
  <pre><code>[1 2] [3 4 5] [1 2 3 4 5]
  </code></pre>
  
  <p>I guess the function of <code>...</code> is to pick all elements from <code>elems</code>, but I haven't found an official explanation. What is it?</p>