Golang reflect.SelectCase and SelectDir types example

package reflect

Golang reflect.SelectCase and SelectDir types usage example

 package main

 import (
  "fmt"
  "reflect"
 )

 func main() {
  var chr = make(chan string, 1)
  var rCase reflect.SelectCase

  rCase.Dir = reflect.SelectRecv
  rCase.Chan = reflect.ValueOf(chr)

  // see http://golang.org/pkg/reflect/#SelectDir
  // A SelectDir describes the communication direction of a select case.

  fmt.Println("Direction of case : ", rCase.Dir) // SelectRecv enum #2 - direction of case

  fmt.Println("Channel to use : ", rCase.Chan) // channel to use (for send or receive)

 // invalid because this is SelectRecv case, not SelectSend
  fmt.Println("Value to send : ", rCase.Send) 

  fmt.Println("-------------------------------------")

  var chs = make(chan string, 2)
  var sCase reflect.SelectCase

  sCase.Dir = reflect.SelectSend
  sCase.Send = reflect.ValueOf(chs)

  // see http://golang.org/pkg/reflect/#SelectDir
  fmt.Println("Direction of case : ", sCase.Dir) // SelectSend enum #1- direction of case

  fmt.Println("Channel to use : ", sCase.Chan) // invalid because ONLY send, not send or receive

  fmt.Println("Value to send : ", sCase.Send) // valid because this the SelectSend case

 }

Output :

Direction of case : 2

Channel to use :

Value to send :


Direction of case : 1

Channel to use :

Value to send :

References :

http://golang.org/pkg/reflect/#SelectCase

http://golang.org/pkg/reflect/#SelectDir

Advertisement