標籤:不能 通過 dev print class expected path 執行 test
一,第一個go程式,hello world!!!
建立learngo目錄,再建立src,最後編寫hello.go檔案
package mainimport ( "fmt")func main(){ fmt.Printf("hello world!!!")}
從第一個go程式中,我們可以初始認識一下go 語言的程式結構
1,package 聲明go語言的包,
2,import 匯入包
3,func main() {} go語言函數
在go語言中 需要注意的幾個地方
(1)packeage main 表示這個包是可以編譯成可執行檔的(可執行檔和庫的區別是,可執行檔編譯完成之後,就可以獨自執行,如果是庫檔案編譯完後只能生產一個lib庫,lib庫只能被其它可執行程式調用)
(2)go 語言中匯入的包或者定義的變數,函數等,需要在程式中使用,如果沒有使用,程式編譯會報錯。這也是Go語言中遵循極簡的編程思路
編寫完第一個go程式後,如何運行? 找到你編寫的go 檔案,然後執行 go run src/hello.go(快速執行go 檔案)
二,go 語言中命令的常規使用
(1)go語言環境變數的查看,在windows 下執行go env 即可列出go語言的所有環境變數
這些變數中最重要的是GOPATH,所有的源碼,程式都放在GOPATH中,GOPATH 路徑最好只設定一個
另外 go 語言有是跨平台的,在windows 下編寫一個go 程式,完成編譯後,在Linux下任然可以執行
(2)go build 命令是用來編譯go 程式的,編譯完成之後會產生一個.exe 二進位檔案,這個檔案不論放在那裡都可以執行, go build project/webdev/main, 在編譯命令中,只需要寫src 以後的檔案路徑就可以
(3)go install 命令是安裝可執行檔到bin目錄 go install project/webdev/main,第一次執行go install後GOpath 中會自動產生一個bin 目錄,這個bin 目錄存放所有編譯後的可執行程式
(4).\ 就可以運行編譯後的可執行檔.exe 檔案
(5)go test 執行單元測試,源碼檔案名稱中加上_test ,在檔案中定義函數,函數命定義func Testadd(t *testing.T),go 語言在編譯中不會將測試檔案編譯到其中
測試程式碼範例
package calcimport ( "testing" #匯入testing 模組 )func TestAdd(t *testing.T) { #test 函數定義 var sum int sum = Add(5, 6) if sum != 10 { t.Fatalf("add is not right, sum:%v expected:11",sum) #定義出錯時輸出 } t.Logf("add is ok") #列印正確日誌}
(6)go fmt 格式化所有源碼,將源碼的格式進行標準化, go fmt -w ./* 可以目前的目錄下所有檔案都格式化
三,編寫自訂的go 語言套件
(1)建立一個目錄,例如calc
package cale #聲明這個包的名字,最好是和自己所建立的目錄一致func Add(a int, b int) int { #本句中,前兩個int是聲明參數的資料類型,後一個int為傳回值的類型 #go 語言為強型別語言,變數一般都需要指定類型 return a+b}
(2)建立go的包後,如何在其它代碼中引匯入,(注意,匯入的時候需要把整個包都匯入,不能單獨匯入包中的某個.go檔案)
package mainimport ( "fmt" cale "project/webdev/calc" #匯入自訂包(匯入路徑是src之後的路徑)
#路徑前面的cale為包設定別名)func main() { x := calc.Add(1,2) #go 語言中包中的函數的調用,包的名字的.函數匯入 fmt.Printf("x:%d".x)}
(3)go 語言中包的組織,需要注意,在同一個目錄下,所有的go 源碼檔案中聲名包都只能有一個,即package 包名 只能有一個,如果出現多個,會出現編譯報錯,另外,包的名字為main 而且有func main 這個包編譯完之後是可執行檔
四,go 語言多線程的定義
基於CSP 模型實現
func calc() {
//大量計算
}
func main() {
go calc() #在函數前面添加go 語句
}
五,go語言中程式通訊方式----只有管道
(1)管道,類似unix/linux中的pipe
(2)多個goroute 之間通過channel進行通訊
(3)支援go語言中的任何類型
func main() { pipe := make(chan int,3) #pip := 定義pip 變數,make 分配空間 pipe <- 1 #chan 管道,int 為管道中的資料類型,3為管道的記憶體大小 pipe <- 2 #<- 存入資料
var a int
a <- pipe #讀取管道中的資料}
六,go語言返回多個值
go語言中需要在函數定義時就定義傳回值的類型
func calc(a int, b int) (int,int) { #(int,int)定義傳回值的類型 sum := a+b avg := (a+b)/2 return sum, avg #返回多個值}
go語言學習--基礎篇(1)