go語言學習--基礎篇(1)

一,第一個go程序,hello world!!! linux

 建立learngo目錄,再建立src,最後編寫hello.go文件web

package main

import (
      "fmt"
)

func main(){
     fmt.Printf("hello world!!!")
}

從第一個go程序中,咱們能夠初始認識一下go 語言的程序結構編程

1,package 聲明go語言的包,windows

2,import 導入包多線程

3,func main() {} go語言函數函數

       在go語言中 須要注意的幾個地方單元測試

      (1)packeage main 表示這個包是能夠編譯成可執行文件的(可執行文件和庫的區別是,可執行文件編譯完成以後,就能夠獨自執行,若是是庫文件編譯完後只能生產一個lib庫,lib庫只能被其它可執行程序調用)測試

      (2)go 語言中導入的包或者定義的變量,函數等,須要在程序中使用,若是沒有使用,程序編譯會報錯。這也是Go語言中遵循極簡的編程思路ui

編寫完第一個go程序後,如何運行? 找到你編寫的go 文件,而後執行 go run  src/hello.go(快速執行go 文件)spa

 

二,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 calc

import (

    "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 main

import (

   "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                        #返回多個值
}
相關文章
相關標籤/搜索