1. 程式人生 > >go語言的特性

go語言的特性

process print 人員 生成可執行文件 close spa nth dev roc

一、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 格式化代碼文件(排版)

技術分享圖片goroutine

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

技術分享圖片View Code

goroute/add.go

技術分享圖片View Code

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
}

二、包的概念

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語言的特性