一尘不染

Golang类型的接口{}是没有方法的接口

go

目前我有这样的事情

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未定义(类型interface {}是没有方法的接口)

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

{1}


阅读 185

收藏
2020-07-02

共1个答案

一尘不染

您必须先将其声明为兼容类型,然后才能访问其字段。

id := v.(struct{Id int}).Id
2020-07-02