1、golang語言特性python
1. 垃圾回收linux
a、內存自動回收,不再須要開發人員管理內存 //開發代碼中不能存在無引用的變量,否則代碼出錯golang
b、開發人員專一業務實現,下降了心智負擔併發
c、只須要new分配內存,不須要釋放函數
2. 自然併發ui
a、從語言層面支持併發,很是簡單編碼
b、goroute,輕量級線程,建立成千上萬個goroute成爲可能spa
c、基於CSP(Communicating Sequential Process)模型實現(基於goroute、channel)線程
併發實例:3d
不須要擔憂編碼問題,全是utf-8
:= 至關於變量的聲明和賦值
在go名稱中不建議使用下劃線 _
//單行註釋
/* */多行註釋
go fmt -w filename 格式化代碼文件(排版)
package main import( "time" "fmt" ) func test_goroute(a int) { fmt.Println(a) } func main() { for i := 0; i < 100; i++ { go test_goroute(i) } time.Sleep(time.Second) }
3. channel(管道,進程間的通訊)
a、管道,相似unix/linux中的pipe
b、多個goroute之間經過channel進行通訊
c、支持任何類型
func main() {
pipe := make(chan int,3) //make 分配內存空間
pipe <- 1 //向管道里面扔數值
pipe <- 2 // len(pipe) 管道的長度
t1 =<- pipe //取管道里面的數據
}
管道的傳值:
main/main.go
package main import( "go_dev/day1/goroute_example/goroute" "fmt" ) func main() { var pipe chan int pipe = make(chan int, 1) go goroute.Add(100, 300, pipe) sum := <- pipe fmt.Println("sum=", sum) }
goroute/add.go
package goroute func Add(a int, b int, c chan int) { sum := a +b c <- sum }
4. 多返回值
一個函數返回多個值
main/main.go
package main
import(
"go_dev/day1/package_example/calc" //調用其餘包,路徑根據GOPANTH不用寫src,直接從src目錄下開始
"fmt" ) func main() { sum,_ := calc.Add(100, 300) //接收返回值得一個,_沒有值,打印報錯 fmt.Println("sum=",sum) }
calc/Add.go
package calc
func Add(a int, b int) (int,int) { return a + b,a - b
}
2、包的概念
一、和python同樣,把相同功能的代碼放到一個目錄,稱之爲包
二、包能夠被其餘包引用(包內的變量名必須是大寫開頭,才能被其餘包調用)
三、main包是用來生成可執行文件,每一個程序只有一個main包
四、包的主要用途是提升代碼的可複用性
3、包的編譯
創建以下目錄結構:
將project添加到GOPATH的環境變量中
而後在PROJECT下編譯代碼:
go build godev/day1 //由於添加了GOPATH環境變量,能直接找到src文件,因此不用寫src,直接編譯包含main包的庫就是了。
go build -o bin/day1.exe godev/day1 // 將編譯文件保存在PROJECT/bin下,並制定編譯後的文件名
編譯完成後,會生成day1.exe文件,.\day1.exe執行