一,併發
package mainimport (
"bufio""
fmt"
"math""
os")const result = "
polar radius=%.02f θ=%.02f° → cartesian x=%.02f y=%.02f\n
"var prompt = "
enter a radius and an angle (in degrees), e.g., 12.5 90,
" + "
or %s to quit.
"type polar
struct
type cartesian
struct
func init()
func main()
func createsolver(questions chan polar) chan cartesian
}}()
return
answers
}func interact(questions chan polar, answers chan cartesian)
varradius, tt float64
if _, err := fmt.sscanf(line, "
%f %f
", &radius, &tt); err !=nil
questions
<-polar
coord := <-answers
fmt.printf(result, radius, tt, coord.x, coord.y)
}fmt.println()
}
main函式做了幾個事情
1.建立questions通道
2.建立solver通道,啟動計算協程
3.進行主迴圈(使用了沒有條件的for)
這個程式使用了go的協程,協程的建立方法:go 函式。協程要和主程序通訊,所以建立了兩個通道,乙個通道是主程序寫入資料,協程來讀取,乙個通道協程建立,主程序讀取。
二,協程。
goroutine是程式中與其他goroutine完全相互獨立而併發執行的函式活著方法呼叫。每乙個go程式都至少有乙個goroutine,即會執行main包中main函式的主goroutine。goroutine非常像輕量級的執行緒或者協程,他們可以批量的建立。所有的goroutine享有相同的位址空間,同時go語言提供了鎖原語來保證資料能夠安全的跨goroutine共享。然而go語言推薦的併發程式設計方式是通訊,而非資料共享。關於通道,如果給定了乙個緩衝區的容量,那麼通訊就是非同步的,只要緩衝區有未使用的空間用於傳送資料,或還包含可以接收的資料,那麼其通訊酒會無阻塞的進行。如果是沒有緩衝區的通道,或者通道滿了,那麼就將變成同步的通訊。
goroutine接收資料的時候,可以使用select同時監聽多個通道,任意乙個通道有資料,就會啟用對應通道的處理。
Go語言程式設計(五)之常量
在go語言中,常量是指編譯期間就已知且不可改變的值。常量可以是數值型別 包括整型 浮點型和複數型別 布林型別 字串型別等。字面常量 是指程式中硬編碼的常量。go語言的字面常量是無型別的。只要這個常量在相應型別的值域範圍內,就可以作為該型別的常量。常量定義 通過const關鍵字,可以給字面常量指定乙個...
《Go語言程式設計》學習筆記
1.變數 var v1 int var v2 string var v3 10 int 陣列 var v4 int 陣列切片 var v5 struct var v6 int 指標 var v7 map string int map,key為string型別,value為int型別 var v8 f...
Go語言學習筆記 五
這是go語言學習筆記的第五篇 條件語句格式 if condition else 幾點注意的地方 func example x int int else 選擇語句格式 switch iswitch幾點注意的地方 go語言中迴圈語句只支援for關鍵字,不支援while和do while。for基本用法如...