La imposibilidad de convertir sectores de diferentes tipos, como lo ejemplifica el fragmento de código proporcionado, se debe a la conversión de tipos específicos reglas descritas en la especificación Go. Estas reglas rigen cuándo un valor no constante se puede convertir a un tipo específico.
Ninguna de las reglas de conversión se aplica al caso en el que intenta convertir una porción de Bar en una porción de Foo. Si bien los tipos subyacentes de Foo y Bar son idénticos, los tipos subyacentes de sus respectivos sectores no lo son. Esto da como resultado la imposibilidad de asignar un valor []Foo a una variable de tipo []Bar.
Comprender los tipos subyacentes
Es crucial tener en cuenta que el valor subyacente El tipo de una variable no es necesariamente el mismo que el tipo de la variable misma. En el caso de sectores, el tipo de elemento es el tipo subyacente. Por lo tanto, mientras Foo y Bar tienen el mismo tipo subyacente (Foo), []Foo y []Bar no lo tienen.
Una solución práctica
Para abordar este problema , puede crear un tipo intermedio que utilice el alias Bar como Foo. Este enfoque funciona porque el tipo de elemento del sector sigue siendo el mismo. Por ejemplo:
type Foo struct { A int }
type Bar Foo
type Foos []Foo
type Bars Foos
func main() {
foos := []Foo{Foo{1}, Foo{2}}
bars := Bars(foos)
fmt.Println(bars)
}
Salida:
[{1} {2}]
Esta solución crea sectores con el mismo tipo de elemento subyacente, lo que permite la conversión entre ellos.
Consideraciones inseguras
Como nota de precaución, si bien es técnicamente posible "ver" una porción de Foo como una porción de Bar usando operaciones inseguras, este enfoque elude la seguridad de tipos. Se recomienda utilizar el enfoque de alias de tipos descrito anteriormente por razones de seguridad y confiabilidad.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3