为什么不能在分配中使用(func(string)类型)作为func(interface {})类型

时间:2019-01-08 23:22:18

标签: go

请首先查看下面的代码。

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.
}

运行于https://play.golang.org/p/16cE4O3eb95

为什么InterfaceFunc不能容纳StringFunc,而interface{}却不能容纳string

1 个答案:

答案 0 :(得分:1)

您不能执行s = ii = s,原因是两个函数的类型不同(签名不同),不能在golang中仅将一种类型分配给另一种类型。

type InterfaceFunc func(interface{}) type StringFunc func(string)也坐在那里无所事事。