go - 为什么不能在赋值中使用 (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
。
解决方案
你不能做s = i
or i = s
,原因是这两个函数的类型不同(不同的签名),你不能只在 golang 中将一种类型分配给另一种类型。
也type InterfaceFunc func(interface{}) type StringFunc func(string)
坐在那里无所事事。
推荐阅读
- javascript - 通过节点的异步/等待不需要按预期顺序返回结果 - 使用什么正确模式?
- java - Java中的String Rotation程序,用于查找向后旋转的空格数
- c# - 实体框架为一对多 rel 创建查询
- linux - ELF 文件中的文本和数据段与 .text 和 .data 段有什么区别?
- python - 如何确定对象的属性及其正确的函数返回?
- php - Google Adwords 通过 Measurement Protocol 保存服务器端转化跟踪
- uml - UML 组件图关系
- c# - 如何将自定义数据类型从 C++ DLL 方法返回到 C# 代码?
- html - offsetTop 将其子元素的边距相加
- python - 如何使用 Python 和 Pyomo 和 Ipopt 获得 Hessian 和 Lagragian 的梯度来计算 KKT 矩阵