2015-08-28 25 views
3
有得

目前林这样Golang类型的接口{}是没有方法

main.go

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

而且我gojob封装接口

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是beeing执行上的goroutine每2秒,但我要访问的匿名结构我过去了......但是当我尝试访问

t.Id

即时得到

t.Id未定义(类型接口{}是接口与没有方法)

然而印刷吨给我的预期ř esult

{1}

回答

13

你必须type assert它具有兼容类型,然后才能访问它的字段。

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

对不起鸡蛋里挑骨头,但你的意思[“类型断言”(http://golang.org/ref/spec#Type_assertions)(因为“铸造”可能意味着不同的东西) – JimB

+0

@JimB你100%正确,我会更新它。 – OneOfOne

相关问题