Мне трудно понять некоторые утверждения типов в Go и почему приведенный ниже код не будет работать и приведет к панике.
паника: преобразование интерфейса: интерфейс {} — это []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
}