mirror of
				https://github.com/golang/go.git
				synced 2025-11-04 02:30:57 +00:00 
			
		
		
		
	
		
			
	
	
		
			141 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			141 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// run
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Copyright 2016 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 (
							 | 
						||
| 
								 | 
							
									"log"
							 | 
						||
| 
								 | 
							
									"reflect"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func test(got, want interface{}) {
							 | 
						||
| 
								 | 
							
									if !reflect.DeepEqual(got, want) {
							 | 
						||
| 
								 | 
							
										log.Fatalf("got %v, want %v", got, want)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func main() {
							 | 
						||
| 
								 | 
							
									var i int
							 | 
						||
| 
								 | 
							
									var ip *int
							 | 
						||
| 
								 | 
							
									var ok interface{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Channel receives.
							 | 
						||
| 
								 | 
							
									c := make(chan int, 1)
							 | 
						||
| 
								 | 
							
									c2 := make(chan int)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									i, ok = <-c
							 | 
						||
| 
								 | 
							
									test(i, 42)
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									_, ok = <-c
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									select {
							 | 
						||
| 
								 | 
							
									case i, ok = <-c:
							 | 
						||
| 
								 | 
							
										test(i, 42)
							 | 
						||
| 
								 | 
							
										test(ok, true)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									select {
							 | 
						||
| 
								 | 
							
									case _, ok = <-c:
							 | 
						||
| 
								 | 
							
										test(ok, true)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									select {
							 | 
						||
| 
								 | 
							
									case i, ok = <-c:
							 | 
						||
| 
								 | 
							
										test(i, 42)
							 | 
						||
| 
								 | 
							
										test(ok, true)
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										log.Fatal("bad select")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									select {
							 | 
						||
| 
								 | 
							
									case _, ok = <-c:
							 | 
						||
| 
								 | 
							
										test(ok, true)
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										log.Fatal("bad select")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									select {
							 | 
						||
| 
								 | 
							
									case i, ok = <-c:
							 | 
						||
| 
								 | 
							
										test(i, 42)
							 | 
						||
| 
								 | 
							
										test(ok, true)
							 | 
						||
| 
								 | 
							
									case <-c2:
							 | 
						||
| 
								 | 
							
										log.Fatal("bad select")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c <- 42
							 | 
						||
| 
								 | 
							
									select {
							 | 
						||
| 
								 | 
							
									case _, ok = <-c:
							 | 
						||
| 
								 | 
							
										test(ok, true)
							 | 
						||
| 
								 | 
							
									case <-c2:
							 | 
						||
| 
								 | 
							
										log.Fatal("bad select")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									close(c)
							 | 
						||
| 
								 | 
							
									i, ok = <-c
							 | 
						||
| 
								 | 
							
									test(i, 0)
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									_, ok = <-c
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Map indexing.
							 | 
						||
| 
								 | 
							
									m := make(map[int]int)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									i, ok = m[0]
							 | 
						||
| 
								 | 
							
									test(i, 0)
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									_, ok = m[0]
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									m[0] = 42
							 | 
						||
| 
								 | 
							
									i, ok = m[0]
							 | 
						||
| 
								 | 
							
									test(i, 42)
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									_, ok = m[0]
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Type assertions.
							 | 
						||
| 
								 | 
							
									var u interface{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									i, ok = u.(int)
							 | 
						||
| 
								 | 
							
									test(i, 0)
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ip, ok = u.(*int)
							 | 
						||
| 
								 | 
							
									test(ip, (*int)(nil))
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									_, ok = u.(int)
							 | 
						||
| 
								 | 
							
									test(ok, false)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									u = 42
							 | 
						||
| 
								 | 
							
									i, ok = u.(int)
							 | 
						||
| 
								 | 
							
									test(i, 42)
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									_, ok = u.(int)
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									u = &i
							 | 
						||
| 
								 | 
							
									ip, ok = u.(*int)
							 | 
						||
| 
								 | 
							
									test(ip, &i)
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									_, ok = u.(*int)
							 | 
						||
| 
								 | 
							
									test(ok, true)
							 | 
						||
| 
								 | 
							
								}
							 |