Als Beispiel, kann ich einen Nullwert des zugrunde liegenden Typs von der Schnittstelle erhalten Arbeit?erhalten zugrunde liegenden Typ von einer bestimmten Schnittstelle in Golang
func MakeSomething(w Worker){
w.Work()
//can I get a zeor value type of The type underlying w?
//I tried as followed, but failed
copy :=w
v := reflect.ValueOf(©)
fm :=v.Elem()
modified :=reflect.Zero(fm.Type())//fm.type is Worker, and modified comes to be nil
fm.Set(modified)
fmt.Println(copy)
}
type Worker interface {
Work()
}
meine erste Frage, ich danke Ihnen aufrichtig ~ fand ich den Unterschied, 'fmt.Println (reflect.ValueOf (w) .Type()) // print * main.Testg' ' fmt.Println (reflect.ValueOf (& w) .Typ()) // print * main.Worker' in dem Fall, dass ich den zweiten Weg verwende (ich denke, das kann den Wert w Punkt ändern) –
@linvan Gern geschehen! Ja, '& w' ist ziemlich nutzlos, wirklich. Es gibt Ihnen einen Zeiger auf eine Schnittstelle, die einen Zeiger auf den Wert enthält. Und Sie arbeiten sehr selten (nie, wirklich) mit Zeigern auf Schnittstellen in Go. – ANisus