Ho una funzioneCast a puntatore struct per interfacciarsi puntatore nella Golang
func doStuff(inout *interface{}) {
...
}
lo scopo di questa funzione è quella di essere in grado di trattare un puntatore di qualsiasi tipo come input. Ma quando voglio chiamarlo con il puntatore di una struct ho un errore.
type MyStruct struct {
f1 int
}
Quando si chiama doStuff
ms := MyStruct{1}
doStuff(&ms)
ho
test.go:38: cannot use &ms (type *MyStruct) as type **interface {} in argument to doStuff
Come posso gettato &ms
per essere compatibile con *interface{}
?
Grande, tu fai la mia giornata! – taharqa
Il modo in cui le variabili di interfaccia lavorano internamente non è rilevante per la domanda. Semanticamente una variabile di interfaccia contiene una copia del valore da cui è stata assegnata, proprio come qualsiasi altro tipo in Go. Sotto è implementato con un puntatore immutabile ai dati, ma non è visibile al programmatore. – newacct
Dovresti spiegare che passare il puntatore all'interfaccia funziona direttamente perché se 'MyStruct' è conforme a un protocollo, allora' * MyStruct' si conforma anche al protocollo (poiché il set di metodi di un tipo è incluso nel set di metodi del tipo di puntatore). In questo caso, l'interfaccia è l'interfaccia vuota, quindi accetta comunque tutti i tipi, ma comunque. – newacct