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