Come è possibile convertire il tipo personalizzato in interface{}
e quindi nel tipo di base (ad esempio uint8
)?Tipo di tipi personalizzati di trasmissione per tipi di base
non posso usare getto diretto come uint16(val.(Year))
perché io non conosca tutti i tipi personalizzati, ma posso determinare i tipi di base (uint8
, uint32
, ...) in fase di esecuzione
Ci sono molti personalizzato tipi (di solito usato come enumerazioni) basate su numerica:
es:
type Year uint16
type Day uint8
type Month uint8
e così via ...
La questione è sul tipo di fusione da interface{}
a tipi di base:
package main
import "fmt"
type Year uint16
// ....
//Many others custom types based on uint8
func AsUint16(val interface{}) uint16 {
return val.(uint16) //FAIL: cannot convert val (type interface {}) to type uint16: need type assertion
}
func AsUint16_2(val interface{}) uint16 {
return uint16(val) //FAIL: cannot convert val (type interface {}) to type uint16: need type assertion
}
func main() {
fmt.Println(AsUint16_2(Year(2015)))
}
http://play.golang.org/p/cyAnzQ90At
Si prega di notare che né 'val (unit16)' 'né uint16 (val)' è un "cast":. Il primo è un "tipo asserzione" e la seconda e la "conversione di tipo". – Volker