"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo escribir correctamente afirmar una porción de valores de interfaz en Go?

¿Cómo puedo escribir correctamente afirmar una porción de valores de interfaz en Go?

Publicado el 2025-01-01
Navegar:363

How Can I Correctly Type Assert a Slice of Interface Values in Go?

Escriba afirmando una porción de valores de interfaz

En programación, es común encontrar situaciones en las que necesita escribir afirmar una porción de valores de interfaz. Sin embargo, esto a veces puede dar lugar a errores. Profundicemos en las razones por las que afirmar una porción de valores de interfaz puede no siempre ser factible.

Al intentar escribir aserción en un tipo específico, como []Símbolo, a partir de una porción de valores de interfaz, []Nodo , como en el ejemplo proporcionado:

args.([]Symbol)

Es posible que encuentre el siguiente error:

invalid type assertion: args.([]Symbol) (non-interface type []Node on left)

Este error surge porque un segmento, como []Nodo, no es un tipo de interfaz, a diferencia del propio Nodo. Un segmento posee su propio tipo distintivo con su propio conjunto de comportamientos y métodos. Por lo tanto, carece de la fluidez y adaptabilidad de una interfaz, lo que permite que el tipo subyacente cambie dinámicamente.

Si bien puede parecer conveniente tratar una porción de valores de la interfaz como una interfaz, viola fundamentalmente el concepto de escritura. . En el ejemplo anterior, la intención es convertir los argumentos del sector en un sector de valores de símbolo. Sin embargo, dado que args es una porción de valores de Nodo, no se puede realizar una aserción de tipo sencilla.

Para manejar correctamente esta situación, puede utilizar un enfoque alternativo:

symbols := make([]Symbol, len(args))
for i, arg := range args { symbols[i] = arg.(Symbol) }

Este código crea una nueva porción de valores de símbolo, símbolos e itera sobre la porción de argumentos, convirtiendo cada elemento en un Símbolo que utiliza una afirmación de tipo. Esta conversión manual garantiza que cada elemento del segmento resultante se ajuste al tipo deseado, proporcionando la funcionalidad deseada sin la necesidad de afirmaciones de tipos no válidos.

Último tutorial Más>

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