package main
import"fmt"funcmain(){a :=1b :=2defercalc(a,calc(a,b))a =0defercalc(a,calc(a,b))}funccalc(x,y int)int{fmt.Println(x,y,x+y)return x+y
}
package main
import"fmt"funcmain(){deferfunc(){fmt.Println(1)}()deferfunc(){fmt.Println(2)}()deferfunc(){fmt.Println(3)}()panic(1)// 程序发生panic 会先处理defer然后panic}
package main
import"fmt"funcprintArray(array *[3]int){for i :=range array {fmt.Println(array[i])}}funcdeferFuncParameter(){var aArray =[3]int{1,2,3}deferprintArray(&aArray)aArray[0]=10return}funcmain(){deferFuncParameter()// 10 2 3}
package main
import"fmt"var ch1 chanintvar ch2 chanintvar chs =[]chanint{ch1, ch2}var numbers =[]int{1,2,3,4,5}func main (){select{casegetChan(0)<-getNumber(2):fmt.Println("1th case is selected.")casegetChan(1)<-getNumber(3):fmt.Println("2th case is selected.")default:fmt.Println("default!.")}}funcgetNumber(i int)int{fmt.Printf("numbers[%d]\n", i)return numbers[i]}funcgetChan(i int)chanint{fmt.Printf("chs[%d]\n", i)return chs[i]}select走的是default,但是每个case都会被计算一次
chs[0]
numbers[2]
chs[1]
numbers[3]default!.
package main
import"fmt"funcmain(){ch1 :=make(chanint,1)ch2 :=make(chanint,1)ch1 <-3ch2 <-5select{case<- ch1:fmt.Println("ch1 selected.")breakfmt.Println("ch1 selected after break")case<- ch2:fmt.Println("ch2 selected.")fmt.Println("ch2 selected without break")}}
package main
import("fmt""runtime""sync")var wg = sync.WaitGroup{}funcmain(){fmt.Println("main goroutine start...")wg.Add(2)runtime.GOMAXPROCS(1)for i :=0; i <2; i++{gofunc(i int){fmt.Println(i)wg.Done()}(i)}wg.Wait()fmt.Println("main goroutine finished...")}