当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Golang reflect.TrySend()用法及代码示例


Go语言提供了运行时反射的内置支持实现,并允许程序借助反射包来操纵任意类型的对象。在Golang企图reflect.TrySend()函数来发送对V频道X,但不会阻止。要访问此函数,需要在程序中导入反射包。

用法:
func (v Value) TrySend(x Value) bool

参数:此函数接受值类型(x)的一个参数。

返回值:该函数返回值是否被发送。

以下示例说明了以上方法在Golang中的用法:



范例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()) 
    
}    

输出:

true 1 1

范例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)  
} 

输出:

true 1 1
1
true
123
1 false



相关用法


注:本文由纯净天空筛选整理自SHUBHAMSINGH10大神的英文原创作品 reflect.TrySend() Function in Golang with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。