funcmain() { ch := make(chanint) gofunc() { for i := 0; i < 5; i++ { ch <- i } //close(ch) }() for index := range ch { fmt.Println("index is ", index) } } // index is 0 // index is 1 // index is 2 // index is 3 // index is 4 // fatal error: all goroutines are asleep - deadlock!
Map中key不存在的时候,返回的是对应类型的零值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package main
import"fmt"
funcmain() { x := map[string]int{"one": 0, "three": 3} if v := x["one"]; v == 0 { fmt.Println("key one is 0") } if v := x["two"]; v == 0 { fmt.Println("key two is 0") } } //key one is 0 //key two is 0
可以通过if v,ok := x["two"]; ok来判断
代码块内同名变量的修改,不会影响代码块外的值
1 2 3 4 5 6 7 8 9 10 11 12 13
package main
import"fmt"
funcmain() { n := 1 { fmt.Println(n) // 1 n := 2 fmt.Println(n) // 2 } fmt.Println(n) // 1 }
nil!=nil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
package main
import ( "fmt" "reflect" )
funcmain() { var a interface{} fmt.Println(a) // nil var b *int fmt.Println(b) // nil fmt.Println(reflect.TypeOf(a)) // nil fmt.Println(reflect.TypeOf(b)) // *nil fmt.Println(a == b) // false }
funcmain() { runtime.GOMAXPROCS(1) gofunc() { for {
} }() fmt.Println("let's go") } // let's go
在只有一个处理器的情况下,即使一个goroutine是死循环,它也不会一直执行下去
两个无符号数字最好不要相减
1 2 3 4 5 6 7 8 9
package main
import"fmt"
funcmain() { var a uint8 = 100 var b uint8 = 102 fmt.Println(a - b) // 254 }
最好不要相减,容易得到负数
go的struct是可以比较的
1 2 3 4 5 6 7 8 9 10 11 12
package main import ( "fmt" ) type user struct { name string } funcmain() { u1 := user{name : "1"} u2 := user{name: "1"} fmt.Println( u1==u2 ) //true }
map、slice、func不可比较,除非是nil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package main
import"fmt" type user struct { name string } funcmain( ) { u1 := map[string]string{ "name " : "1"} u2 := map[string]string{ " name " : "1"} fmt.Println(ul == u2) //invalid operation: u1 == u2 ( map can only be compared to nil )
u3 := [ ]int{} u4 := [ ]int{} fmt.Println(u3 == u4) //invalid operation: u3 == u4 ( slice can only be compared to nil )
u5 := func() {} u6 := func() {} fmt.Println( u5 == u6) // invalid operation: u5 == u6 ( func can only be compared to nil ) }