首页 > 解决方案 > 为什么不能在赋值中使用 (type func(string)) 作为类型 func(interface{})

问题描述

请先看看下面的代码。

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

标签: go

解决方案


你不能做s = ior i = s,原因是这两个函数的类型不同(不同的签名),你不能只在 golang 中将一种类型分配给另一种类型。

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


推荐阅读