mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 08:40:55 +00:00 
			
		
		
		
	 4f61fc96b2
			
		
	
	
		4f61fc96b2
		
	
	
	
	
		
			
			The ken directory is untouched so we have some examples with explicit semis. R=gri CC=golang-dev https://golang.org/cl/2157041
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // $G $D/$F.go && $L $F.$A && ./$A.out
 | |
| 
 | |
| // Copyright 2009 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
 | |
| 
 | |
| type T struct {
 | |
| 	a float64
 | |
| 	b int64
 | |
| 	c string
 | |
| 	d byte
 | |
| }
 | |
| 
 | |
| var a = []int{ 1, 2, 3 }
 | |
| var NIL []int
 | |
| 
 | |
| func arraycmptest() {
 | |
| 	if NIL != nil {
 | |
| 		println("fail1:", NIL, "!= nil")
 | |
| 	}
 | |
| 	if nil != NIL {
 | |
| 		println("fail2: nil !=", NIL)
 | |
| 	}
 | |
| 	if a == nil || nil == a {
 | |
| 		println("fail3:", a, "== nil")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func SameArray(a, b []int) bool {
 | |
| 	if len(a) != len(b) || cap(a) != cap(b) {
 | |
| 		return false
 | |
| 	}
 | |
| 	if len(a) > 0 && &a[0] != &b[0] {
 | |
| 		return false
 | |
| 	}
 | |
| 	return true
 | |
| }
 | |
| 
 | |
| var t = T{1.5, 123, "hello", 255}
 | |
| var mt = make(map[int]T)
 | |
| var ma = make(map[int][]int)
 | |
| 
 | |
| func maptest() {
 | |
| 	mt[0] = t
 | |
| 	t1 := mt[0]
 | |
| 	if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
 | |
| 		println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
 | |
| 	}
 | |
| 
 | |
| 	ma[1] = a
 | |
| 	a1 := ma[1]
 | |
| 	if !SameArray(a, a1) {
 | |
| 		println("fail: map val array", a, a1)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var ct = make(chan T)
 | |
| var ca = make(chan []int)
 | |
| 
 | |
| func send() {
 | |
| 	ct <- t
 | |
| 	ca <- a
 | |
| }
 | |
| 
 | |
| func chantest() {
 | |
| 	go send()
 | |
| 
 | |
| 	t1 := <-ct
 | |
| 	if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
 | |
| 		println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
 | |
| 	}
 | |
| 
 | |
| 	a1 := <-ca
 | |
| 	if !SameArray(a, a1) {
 | |
| 		println("fail: map val array", a, a1)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type E struct { }
 | |
| var e E
 | |
| 
 | |
| func interfacetest() {
 | |
| 	var i interface{}
 | |
| 
 | |
| 	i = a
 | |
| 	a1 := i.([]int)
 | |
| 	if !SameArray(a, a1) {
 | |
| 		println("interface <-> []int", a, a1)
 | |
| 	}
 | |
| 	pa := new([]int)
 | |
| 	*pa = a
 | |
| 	i = pa
 | |
| 	a1 = *i.(*[]int)
 | |
| 	if !SameArray(a, a1) {
 | |
| 		println("interface <-> *[]int", a, a1)
 | |
| 	}
 | |
| 
 | |
| 	i = t
 | |
| 	t1 := i.(T)
 | |
| 	if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
 | |
| 		println("interface <-> struct", t1.a, t1.b, t1.c, t1.d)
 | |
| 	}
 | |
| 
 | |
| 	i = e
 | |
| 	e1 := i.(E)
 | |
| 	// nothing to check; just verify it doesn't crash
 | |
| 	_ = e1
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	arraycmptest()
 | |
| 	maptest()
 | |
| 	chantest()
 | |
| 	interfacetest()
 | |
| }
 |