| // 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: | |
| } | |
| } |