// run // Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "encoding/binary" ) var ( ch1 = make(chan int) ch2 = make(chan int) bin = []byte("a\000\000\001") want = binary.BigEndian.Uint32(bin) c consumer = noopConsumer{} ) type msg struct { code uint32 } type consumer interface { consume(msg) } type noopConsumer struct{} func (noopConsumer) consume(msg) {} func init() { close(ch1) } func main() { var m msg m.code = binary.BigEndian.Uint32(bin) select { case <-ch1: c.consume(m) if m.code != want { // can not use m.code here, or it will work panic("BigEndian read failed") } case <-ch2: } }