Comme l'exemple, puis-je obtenir une valeur nulle de son type sous-jacent à partir de l'interface de travail?obtenir le type sous-jacent à partir d'une interface spécifique dans 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()
}
ma première question, je vous remercie sincèrement ~ j'ai trouvé la différence, 'fmt.Println (reflect.ValueOf (w) .Type()) // print * main.Testg' ' fmt.Println (reflect.ValueOf (& w) .Type()) // imprimer * main.Worker' dans le cas où j'utilise la deuxième façon (je pense que cela peut changer la valeur w pointer vers) –
@linvan De rien! Oui, '& w' est assez inutile, vraiment. Il vous donnera un pointeur vers une interface contenant un pointeur vers la valeur. Et vous travaillez très rarement (jamais, vraiment) avec des pointeurs vers des interfaces dans Go. – ANisus