Sono nuovo per il golang, quindi chiedetevi se questa domanda è troppo ingenua. Si guardò intorno, ma non riuscì a trovare una risposta alla mia domanda di base.Tipo cast vs tipo assertion su struct in calcestruzzo?
Diciamo che ho una struttura e metodi concreti come mostrato di seguito.
type MyData struct{
field1 string
field2 int
}
func(a MyData) OperatorOnString() string{
return a.field1.(string)
}
func(a MyData) OperatorOnInt() int{
return a.field2.(int)
}
La mia domanda è, posso digitare il cast e il ritorno anziché eseguire l'asserzione? Da quello che ho imparato finora è che l'asserzione è usata sui dati dell'interfaccia di tipo. Ma in questo caso ho un tipo concreto. Devo ancora usare l'asserzione o posso fare qualcosa come return int(a.field2)
. So che questo esempio è banale, ma il punto in cui sono confuso è quando utilizzare tra i due tipi di conversione. O c'è qualche idioma golan coinvolto qui?
Grazie
Grazie. Tuttavia, nello scenario reale, i miei operatori avranno alcuni argomenti che verranno utilizzati per operare sui campi MyData. Quindi, prima di restituire quel campo, devo controllare il tipo? – Minty
@Minty: mostra il codice reale. Molto probabilmente stai mescolando diversi concetti e non migliorerà senza codice reale. – Volker
@Minty: se un fn restituisce il tipo 'T' allora solo espressioni di tipo' T' possono apparire in 'return expr'. Non si tratta di campi, si tratta del tipo di espressione. Per esempio. se diciamo che abbiamo 'var i int' in un fn che restituisce' int64', allora possiamo e dobbiamo scrivere 'return int64 (i)'. Annuncio "per verificare il tipo": il controllo del tipo viene eseguito automaticamente dal compilatore. – zzzz