code: func (c *Client) GetBulk(vb uint16, keys []string) (map[string]*gomemcached.MCResponse, error) {
  	rv := map[string]*gomemcached.MCResponse{}
  	going := true
  
  	defer func() {
  		going = false
  	}()
  
  	errch := make(chan error, 2)
  
  	go func() {
  		defer func() { errch <- nil }()
  		for going {
  			res, err := c.Receive()
  			if err != nil {
  				errch <- err
  				return
  			}
  			switch res.Opcode {
  			case gomemcached.GET:
  				going = false
  			case gomemcached.GETQ:
  			default:
  				log.Panicf("Unexpected opcode in GETQ response: %+v",
  					res)
  			}
  			rv[keys[res.Opaque]] = res
  		}
  	}()
  
  	for i, k := range keys {
  		op := gomemcached.GETQ
  		if i == len(keys)-1 {
  			op = gomemcached.GET
  		}
  		err := c.Transmit(&gomemcached.MCRequest{
  			Opcode:  op,
  			VBucket: vb,
  			Key:     []byte(k),
  			Opaque:  uint32(i),
  		})
  		if err != nil {
  			return rv, err
  		}
  	}
  
  	return rv, <-errch
  }
docs: // GetBulk gets keys in bulk