Golang type interface {} 是没有方法的接口(interface)

标签 go interface

目前我有这样的事情

main.go

gojob.NewJob("every 2 second", "pene", func() {
        t := gojob.Custom("pene")
        log.Println(t)
    }, struct {
        Id int
    }{
        1,
    })

还有我的工作包

func NewJob(t string, name string, c func(), v interface{}) {
    e := strings.Split(t, " ")
    job := process(e)
    job.log = false
    job.name = name
    job.action = c
    job.custom = v
    jobs = append(jobs, job)
}

还有

func Custom(name string) interface{} {
    for i := range jobs {
        if jobs[i].name != name {
            continue
        }
        return jobs[i].custom
    }
    return nil
}

事情是我传递给 NewJob 的函数在 goroutine 上每 2 秒执行一次,但我想访问我传递的匿名结构......但是当我尝试访问时

t.Id

我来了

t.Id undefined (type interface {} is interface with no methods)

但是打印 t 给了我预期的结果

{1}

最佳答案

你必须 type assert在您可以访问其字段之前,将其转换为兼容的类型。

id := v.(struct{Id int}).Id

关于Golang type interface {} 是没有方法的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32277884/

相关文章:

unit-testing - 需要文件的单元测试方法

docker - 如何正确配置 Dockerfile 以在 Google Cloud Run 上运行?

C++:什么是类接口(interface)?

c# - 有没有办法强制派生类实现抽象类或嵌套在基类中的接口(interface)?

go - 如何使用接口(interface)来规范化不同的结构?

http - 使用 auth 访问 http 代理

json - 在同一文件中添加两个json文件

reference - 另一种类型中自定义类型的 Golang slice 作为引用

c# - 更多关于 Virtual/new...plus 界面的信息!

java - 使用 JAVA 访问 MS Outlook