go語言的特性
一、golang語言特性
1. 垃圾回收
a、內存自動回收,再也不需要開發人員管理內存 //開發代碼中不能存在無引用的變量,不然代碼出錯
b、開發人員專註業務實現,降低了心智負擔
c、只需要new分配內存,不需要釋放
2. 天然並發
a、從語言層面支持並發,非常簡單
b、goroute,輕量級線程,創建成千上萬個goroute成為可能
c、基於CSP(Communicating Sequential Process)模型實現(基於goroute、channel)
並發實例:
不需要擔心編碼問題,全是utf-8
:= 相當於變量的聲明和賦值
在go名稱中不建議使用下劃線 _
//單行註釋
/* */多行註釋
go fmt -w filename 格式化代碼文件(排版)
goroutine3. 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
View Codegoroute/add.go
View Code4. 多返回值
一個函數返回多個值
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
}
二、包的概念
1、和python一樣,把相同功能的代碼放到一個目錄,稱之為包
2、包可以被其他包引用(包內的變量名必須是大寫開頭,才能被其他包調用)
3、main包是用來生成可執行文件,每個程序只有一個main包
4、包的主要用途是提高代碼的可復用性
三、包的編譯
建立如下目錄結構:
將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執行
go語言的特性