El lenguaje Go proporciona una implementación de soporte incorporada de la reflexión en tiempo de ejecución y permite que un programa manipule objetos con tipos arbitrarios con la ayuda del paquete de reflexión. La función reflect.TrySend() en Golang intenta enviar x en el canal v pero no lo bloquea. Para acceder a esta función, es necesario importar el paquete reflect en el programa.
Sintaxis:
func (v Value) TrySend(x Value) boolParámetros: Esta función acepta un parámetro de tipo Valor (x).
Valor devuelto: esta función devuelve si se envió el valor.
Los siguientes ejemplos ilustran el uso del método anterior en Golang:
Ejemplo 1:
// Golang program to illustrate // reflect.TrySend() Function package main import ( "fmt" "reflect" ) func main() { c := make(chan int, 1) vc := reflect.ValueOf(c) // use of TrySend() method succeeded := vc.TrySend(reflect.ValueOf(123)) fmt.Println(succeeded, vc.Len(), vc.Cap()) }
Producción:
true 1 1
Ejemplo 2:
// Golang program to illustrate // reflect.TrySend() Function package main import ( "fmt" "reflect" ) func main() { c := make(chan int, 1) vc := reflect.ValueOf(c) // use of TrySend() method succeeded := vc.TrySend(reflect.ValueOf(123)) fmt.Println(succeeded, vc.Len(), vc.Cap()) vSend, vZero := reflect.ValueOf(789), reflect.Value{} branches := []reflect.SelectCase{ {Dir: reflect.SelectDefault, Chan: vZero, Send: vZero}, {Dir: reflect.SelectRecv, Chan: vc, Send: vZero}, {Dir: reflect.SelectSend, Chan: vc, Send: vSend}, } selIndex, vRecv, sentBeforeClosed := reflect.Select(branches) fmt.Println(selIndex) fmt.Println(sentBeforeClosed) fmt.Println(vRecv.Int()) vc.Close() // Remove the send case branch this time, // for it may cause panic. selIndex, _, sentBeforeClosed = reflect.Select(branches[:2]) fmt.Println(selIndex, sentBeforeClosed) }
Producción:
true 1 1 1 true 123 1 false
Publicación traducida automáticamente
Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA