2015-08-28 35 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

相關問題