優雅的go語言--入門篇

1.特色

  1.靜態類型,編譯型的開源語言python

  2.腳本華的語法,支持多種編程範式(函數式&面向對象)c++

  3.原生,給力的併發編程的支持git

2.優點

  1.腳本化的語法編程

  2.靜態類型+編譯型,程序運行速度有保障ruby

  3.原生支持併發編程(下降開發,維護成本。程序能夠更好的執行)網絡

3.劣勢

  1.語法糖並無python和ruby那麼多架構

  2.目前的程序運行速度還不及c。但已經趕超c++和Java併發

  3.第三方函數庫暫時不能像絕對主流的編程語言那樣多編程語言

4.環境設置

  1.GOROOT:安裝目錄svn

  2.GOPATH:工做區

  3.GOBIN:編譯文件

5.工做區和GOPATH

1.工做區是放置go源碼文件的目錄

2.通常狀況下,go源碼文件都須要存放在工做區

3.對於命令源碼文件,並非必須的

4.工做區的目錄:

  0.平臺相關目錄

    1.兩個隱含的go語言環境變量

      GOOS:操做系統

      GOARCH:計算架構

    2.以$GOOS_ $GOARCH 爲命名方式,如darwin_amd64

  1.src:

    1.用於存放源碼文件

    2.以代碼包爲組織形式

  2.pkg:

    1.用於存放歸檔文件(名稱以.a爲後綴的文件)

    2.全部歸檔文件都會被存放在pkg目錄下的平臺相關目錄中,一樣以代碼包爲組織形式

  3.bin:

    1.用於存放當前工做區中的go程序的可執行文件

    2.失效:

      1.當環境變量GOBIN已有效設置時,該目錄會變的無心義

      2.當GOPATH的值中包含多個工做區的路徑時,必須設置GOBIN,不然沒法成功安裝go程序的可執行文件

6.源碼文件的分類和含義

1.go源碼文件

1.名稱以.go爲後綴,內容以go語言代碼組織的文件

2.多個go源碼文件是須要用代碼包組織起來的

2.源碼文件分類

  1.命令源碼文件,庫源碼文件:go語言程序

  2.測試源碼文件:輔助源碼文件

  3.命令源碼文件

    1.聲明本身屬於main代碼包,包含無參數聲明和結果聲明的main函數

    2.被安裝後,相應的可執行文件會被存放到GOBIN指向的目錄或 當前工做區目錄的bin目錄下

    3.go程序的入口,但不建議把程序都寫在一個文件中

    4.同一個代碼包中強烈不建議直接包含多個命令源碼文件

  4.庫源碼文件

    1.不具有命令源碼文件的特徵的源碼文件

    2.被安裝後,相應的歸檔文件會被存放到當 前工做區目錄/pkg/平臺相關目錄 下

  5.測試源碼文件

    1.與庫源碼文件相似

    2.不具有命令源碼文件的特徵的源碼文件

    3.名稱以_test.go爲後綴

    4.有測試函數:

      1.至少有一個函數名稱以Test或Benchmark爲前綴

      2.該函數接受一個類型爲*testing.T或*testing.B的參數

      3.示例:

func TestFind(t *testing.T){ } //功能測試函數

func BenchmarkFind(b *testing.B){ } //基準測試函數或性能測試函數

 

7.代碼包的相關知識

1.代碼包的做用

1.編譯和歸檔的最基本單位

2.代碼劃分,集結和依賴的有效組織形式,也是權限控制的輔助手段

2.代碼包的規則

  1.一個代碼包實際上就是一個由導入路徑表明的目錄

  2.導入路徑即 (工做區目錄/src 或 工做區目錄/pkg/平臺相關目錄) 之下的某段子目錄

  3.代碼包的聲明

    1.每一個源碼文件必須聲明其所屬的代碼包

    2.同一個代碼包中的全部源碼文件聲明的代碼包應該是相同的

  4.代碼包聲明與代碼包導入路徑的區別

    1.代碼包聲明語句中的包名稱應該是該代碼包的導入路徑的最右子路徑

  5.代碼包導入

    1.代碼包導入語句中使用的包名稱應該與其導入的路徑一致

  6.代碼包導入方法

    1.普通導入方法

      import 「strings」===> strings.HasPrefix(「abc」,」a」)   

    2.帶別名的導入

      import str 「strings」===>str.HasPrefix(「abc」,」a」)   //能夠直接使用別名

    3.本地化的導入

      import . 「strings」===>HasPrefix(「abc」,」a」)   //無需前綴,本地!!!

    4.僅僅初始化

      import _ 「strings」  //僅執行代碼包中的初始化函數

7.代碼包初始化

  1.代碼包初始化函數即:無參數聲明和結果聲明的init函數

  2.init函數能夠被聲明在任何文件中,且能夠有多個,同一代碼包下多個init函數執行順序是不肯定的

  3.init函數執行時機

    1.單一代碼包內:對全部全局函數進行求值===>執行全部init函數

    2.不一樣代碼包之間:執行被導入代碼包中的init===>執行導入它的那個代碼包的init函數

    3. 4.每個init函數只會被執行一次,init在main函數以前執行

8.命令基礎

1.go run

  1.用於運行命令源碼文件

  2.只能接受一個命令源碼文件以及若干個庫源碼文件做爲文件參數,程序只能有一個入口

  3.其內部操做步驟是:先編譯源碼文件再運行

    源碼文件 —> 編譯 —> 臨時文件 —>運行 —>1. 可執行文件 2.歸檔文件

  4.經常使用標記

    1.-a :強制編譯相關代碼,不論它們的編譯結果是否已經是最新的,通常加上

    2.-n :打印編譯過程當中所需的命令,但不真正執行它們

    3.-p n :並行編譯,n表明並行數量。n的值最好設置爲當前cpu的邏輯cpu(全部cpu的核的總數量)的個數。加快編譯速度

    4.-v : 列出被編譯的代碼包的名稱(不包含go語言自帶的標準庫的代碼包)

    5.-work :顯示編譯時建立的臨時工做目錄的路徑,而且不刪除此臨時工做目錄

    6.-x :打印編譯過程當中所需運行的命令,並執行它們

2.go build

  1.用於編譯源碼文件或代碼包

  2.編譯非命令源碼文件不會產生任何結果文件,只會檢查源碼文件的有效性

  3.編譯命令源碼文件會在該命令的執行目錄中生成一個可執行文件

  4.執行該命令且不追加任何參數時,它會試圖把當前目錄做爲代碼包並編譯

  5.執行該命令且以代碼包的導入路徑做爲參數時,該代碼包及其依賴會被編譯

  6.執行該命令且以若干源碼文件做爲參數時,只有這些文件會被編

3.go install

  1.用於編譯並安裝代碼包或源碼文件

  2.安裝代碼包會在當前工做區的 pkg/平臺相關目錄 下生成歸檔文件

  3.安裝命令源碼文件會在當前工做區的bin目錄或$GOBIN目錄下生成可執行文件

  4.執行該命令且不追加任何參數時,它會試圖把當前目錄做爲代碼包並安裝

  5.執行該命令且以代碼包的導入路徑做爲參數時,該代碼包及其依賴會被安裝

  6.執行該命令且以命令源碼文件及相關庫源碼文件做爲參數時,只有這些文件會被編譯並安裝

4.go get

  1.用於從遠程倉庫上下載並安裝代碼包 如:GitHub,gitLlab,Gogs

  2.受支持的代碼版本控制系統:git,hg,svn,bazaar

  3.指定的代碼包會被帶走到¥GOPATH中包含的第一個工做區的src目錄中 4.經常使用標記

    1.-d :直至下載工做,而不執行安裝動做

    2.-fix :在下載代碼包以後先執行修正動做,然後再緊張編譯和安裝。主要爲了消除版本不兼容

    3.-u :利用網絡來更新已有的代碼包及其依賴包

相關文章
相關標籤/搜索