1. 程式人生 > >我的第一個Golang程式

我的第一個Golang程式

本程式參考:GO語言實戰 GO IN ACTION
package main

import (
   "fmt"
   "runtime"
   "sync"
)

func   main(){
   //分配一個邏輯處理器給排程器使用
   runtime.GOMAXPROCS(1)

   //wg來等待程式完成
   //計數加2,表示要等待兩個goroutine
   var wg sync.WaitGroup
   wg.Add(2)



   fmt.Println("Start Goroutines")

   //宣告一個匿名函式,並建立一個goroutine
   go func() {

      //在函式退出時呼叫DOne來通知main函式工作已經完成
      defer wg.Done()
//顯示字母表三次 for count:=0;count<3;count++{ for char :='a';char <'a'+26;char ++{ fmt.Printf("%c",char) } } }() //宣告一個匿名函式,並建立一個goroutine go func() { //在函式退出時呼叫DOne來通知main函式工作已經完成 defer wg.Done() //顯示字母表三次 for count:=0;count<3;count++{ for char :='A';char <'A'+26;char ++{ fmt.Printf("%c",char) } } }() //等待goroutine結束 fmt.Println("waiting to finish") wg.Wait()
fmt.Println("\nTerminating Program") } /* runtime.GOMAXPROCS 去設定CPU,Golang 預設使用所有的cpu核 */

執行結果:

修改:

runtime.GOMAXPROCS(2)  備註:電腦為雙核處理器
 

 

/* golang中的同步是通過sync.WaitGroup來實現的.WaitGroup的功能:它實現了一個類似佇列的結構,可以一直向佇列中新增任務, 當任務完成後便從佇列中刪除,如果佇列中的任務沒有完全完成,可以通過Wait()函式來出發阻塞,防止程式繼續進行, 直到所有的佇列任務都完成為止.WaitGroup總共有三個方法: Add(delta int), Done(), Wait()。Add:新增或者減少等待goroutine的數量 Done:相當於Add(-1) Wait:執行阻塞,直到所有的WaitGroup數量變成0 */

當程式刪除 

wg.Wait()後,執行結果