title: why cannot use (type func(string)) as type func(interface{}) in assignment
body: <p>Please first have a look at the code below.</p>
  
  <pre><code>package main
  
  import "fmt"
  
  type InterfaceFunc func(interface{})
  type StringFunc func(string)
  
  func stringFunc(s string) {
      fmt.Printf("%v", s)
  }
  
  func interfaceFunc(i interface{}) {
      fmt.Printf("%v", i)
  }
  
  func main() {
      var i = interfaceFunc
      var s = stringFunc
  
      i = s // I would like someone to explain why this can't be done exactly.
  }
  </code></pre>
  
  <p>Run at <a href="https://play.golang.org/p/16cE4O3eb95" rel="nofollow noreferrer">https://play.golang.org/p/16cE4O3eb95</a></p>
  
  <p>Why an <code>InterfaceFunc</code> can't hold a <code>StringFunc</code> while an <code>interface{}</code> can hold a <code>string</code>.</p>