Las aserciones de tipo en Golang brindan acceso al tipo exacto de variable de una interfaz. Si el tipo de datos ya está presente en la interfaz, recuperará el valor del tipo de datos real que tiene la interfaz. Una aserción de tipo toma un valor de interfaz y extrae de él un valor del tipo explícito especificado. Básicamente, se utiliza para eliminar la ambigüedad de las variables de la interfaz.
Sintaxis:
t := value.(typeName)
donde value es una variable cuyo tipo debe ser una interfaz, typeName es el tipo concreto que queremos verificar y el valor subyacente de typeName se asigna a la variable t .
Ejemplo 1:
// Golang program to illustrate // the concept of type assertions package main import ( "fmt" ) // main function func main() { // an interface that has // a string value var value interface{} = "GeeksforGeeks" // retrieving a value // of type string and assigning // it to value1 variable var value1 string = value.(string) // printing the concrete value fmt.Println(value1) // this will panic as interface // does not have int type var value2 int = value.(int) fmt.Println(value2) }
Producción:
GeeksforGeeks panic: interface conversion: interface {} is string, not int
En el código anterior, dado que la interfaz de valor no contiene un tipo int, la declaración desencadenó pánico y la afirmación de tipo falla. Para verificar si un valor de interfaz contiene un tipo específico, es posible que la aserción de tipo devuelva dos valores, la variable con el valor typeName y un valor booleano que informa si la aserción fue exitosa o no. Esto se muestra en el siguiente ejemplo:
Ejemplo 2:
// Golang program to show type // assertions with error checking package main import ( "fmt" ) // main function func main() { // an interface that has // an int value var value interface{} = 20024 // retrieving a value // of type int and assigning // it to value1 variable var value1 int = value.(int) // printing the concrete value fmt.Println(value1) // this will test if interface // has string type and // return true if found or // false otherwise value2, test := value.(string) if test { fmt.Println("String Value found!") fmt.Println(value2) } else { fmt.Println("String value not found!") } }
Producción:
20024 String value not found!
Publicación traducida automáticamente
Artículo escrito por vanigupta20024 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA