2016-07-18 8 views
0

Ich bin Traing, um eine Pause API mit go lang abstrahieren, aber ich total in der Reflexion Teil stecken.Golang in der Reflexion verloren

log.Printf("handleIndex resourceType = %v", res.resourceType) 

slice := reflect.MakeSlice(reflect.SliceOf(res.resourceType), 0, 0) 
err := res.api.DB.Select(&slice, "SELECT * FROM domains") 
if err != nil { 
    log.Printf("SQL Error %s", err) 
} 
fmt.Printf("\n=================================== \n%#v \n=================================== ", slice) 

resource ist ein reflect.Type des Modells

res.api.DB ist sqlx.DB

Ausgabe des Codes ist:

handleIndex resource main.Domain =

SQL Fehler erwartete Scheibe, aber Struktur erhalten

[] mai n.Domain {}

so im Grunde auch ich mache ein Stück reflect.Type Ich habe eine Struktur Was ich vermisse?

+0

See mit wollen auch http://stackoverflow.com/questions/33179876/how-to-make-a-map-pointer-using -reflektieren – JimB

Antwort

1

Sie geben einen Zeiger auf eine reflect.Value in Ihrem Select Anruf. A reflect.Value ist eine Struktur, weshalb Sie diesen Fehler erhalten.

Erstellen Sie stattdessen einen neuen Zeiger des Typs Sie reflect.New

slice := reflect.New(reflect.SliceOf(res.resourceType)) 
err := res.api.DB.Select(slice.Interface(), "SELECT * FROM domains")