go - 为什么不能在赋值中使用 (type func(string)) 作为 type func(interface{})

标签 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 不能保存 StringFuncinterface{} 可以保存 string

最佳答案

你不能做 s = ii = s,原因是两个函数的类型不同(不同的签名),你不能只分配一个在 golang 中与另一个输入。

type InterfaceFunc func(interface{}) type StringFunc func(string) 也坐在那里什么都不做。

关于go - 为什么不能在赋值中使用 (type func(string)) 作为 type func(interface{}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101145/

相关文章:

docker - 在 docker 中使用 gitlab private repo 作为 golang 依赖项

go - 正确关闭执行无限循环的Go例程

xml - 使用 GO 解析 XML 属性

google-app-engine - 如何为 Golang 和 AppEngine 设置 VScode 调试 session ?

slice 类型的 Go-地道命名

templates - 使用 Go 的 html/模板免于转义的白名单标签

Emacs 在 go-mode 下找不到 gofmt

go - 在 CI 文件中进行 gofmt 项目是否有意义

git - 阅读 github.com/username/kit/go/database/go/database/go.mod 修订版 go/database/v1.0.1 : unknown revision go/database/v1. 0.1

sql - 如何避免 slice 引用同一个内存块