【发布时间】:2018-12-14 19:57:41
【问题描述】:
我很难理解 Go 中的某些类型断言,以及为什么下面的代码不起作用并导致恐慌。
panic:接口转换:接口 {} 是 []db.job,而不是 []main.job
主要:
/*stackTypeAssert.go
> panic: interface conversion: interface {} is []db.job, not []main.job
*/
package main
import (
"fmt"
"stackTypeAssert/db"
)
type job struct {
ID int
Status string
}
type jobs interface{}
func main() {
jobTable := db.GetJobs()
fmt.Println(jobTable) // This works: [{1 pending} {2 pending}]
//Type Assertion
var temp []job
//panic: interface conversion: interface {} is []db.job, not []main.job
temp = jobTable.([]job)
fmt.Println(temp)
}
包数据库:
/*Package db ...
panic: interface conversion: interface {} is []db.job, not []main.job
*/
package db
//GetJobs ...
func GetJobs() interface{} {
//Job ...
type job struct {
ID int
Status string
}
task := &job{}
var jobTable []job
for i := 1; i < 3; i++ {
*task = job{i, "pending"}
jobTable = append(jobTable, *task)
}
return jobTable
}
【问题讨论】:
标签: go struct interface type-assertion