go語言學習之路(一)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Go 語言簡介

Go 是一個開源的程式設計語言,它能讓構造簡單、可靠且高效的軟體變得容易。

Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,後來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候發布了Go 1穩定版本。現在Go的開發已經是完全開放的,並且擁有一個活躍的社區。

1、Go 語言特色

  • 簡潔、快速、安全
  • 並行、有趣、開源
  • 記憶體管理、v數組安全、編譯迅速

2、Go 安裝

安裝包下載地址為:https://golang.org/dl/。本文以1.4.2為例

3、Windows 系統下安裝

Windows 下可以使用 .msi 尾碼(在下載列表中可以找到該檔案,如go1.4.2.windows-amd64.msi)的安裝包來安裝。

預設情況下.msi檔案會安裝在 c:\Go 目錄下。你可以將 c:\Go\bin 目錄添加到 PATH 環境變數中。添加後你需要重啟命令視窗才會生效。

4、安裝測試

建立工作目錄 C:\>Go_WorkSpace。

檔案名稱: test.go,代碼如下:

package main import "fmt" func main() {   fmt.Println("Hello, World!")}

使用 go 命令執行以上代碼輸出結果如下:

C:\Go_WorkSpace>go run test.go Hello, World!

讓我們來看下以上程式的各個部分:

    1. 第一行代碼 package main 定義了包名。你必須在源檔案中非注釋的第一行指明這個檔案屬於哪個包,如:package main。package main表示一個可獨立執行的程式,每個 Go 應用程式都包含一個名為 main 的包。

    2. 下一行 import "fmt" 告訴 Go 編譯器這個程式需要使用 fmt 包(的函數,或其他元素),fmt 包實現了格式化 IO(輸入/輸出)的函數。

    3. 下一行 func main() 是程式開始執行的函數。main 函數是每一個可執行程式所必須包含的,一般來說都是在啟動後第一個執行的函數(如果有 init() 函數則會先執行該函數)。

    4. 下一行 /*...*/ 是注釋,在程式執行時將被忽略。單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,並以 */ 結尾,且不可以嵌套使用,多行注釋一般用於包的文檔描述或注釋成塊的程式碼片段。

    5. 下一行 fmt.Println(...) 可以將字串輸出到控制台,並在最後自動增加換行字元 \n。 
      使用 fmt.Print("hello, world\n") 可以得到相同的結果。 
      Print 和 Println 這兩個函數也支援使用變數,如:fmt.Println(arr)。如果沒有特別指定,它們會以預設的列印格式將變數 arr 輸出到控制台。

    6. 當標識符(包括常量、變數、類型、函數名、結構欄位等等)以一個大寫字母開頭,如:Group1,那麼使用這種形式的標識符的對象就可以被外部包的代碼所使用(用戶端程式需要先匯入這個包),這被稱為匯出(像物件導向語言中的 public);標識符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內部是可見並且可用的(像物件導向語言中的 private )。

5、執行 Go 程式

讓我們來看下如何編寫 Go 代碼並執行它。步驟如下:

  1. 開啟編輯器如Sublime2,將以上代碼添加到編輯器中。

  2. 將以上代碼儲存為 hello.go

  3. 開啟命令列,並進入程式檔案儲存的目錄中。

  4. 輸入命令 go run hello.go 並按斷行符號執行代碼。

  5. 如果操作正確你將在螢幕上看到 "Hello World!" 字樣的輸出。

注釋

注釋不會被編譯,每一個包應該有相關注釋。

單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,並以 */ 結尾。如:

// 單行注釋/* Author by shouce.ren菜鳥教程 我是多行注釋 */

6、標識符

以下是無效的標識符:

  • 1ab(以數字開頭)
  • case(Go 語言的關鍵字)
  • a+b(運算子是不允許的)

7、關鍵字

下面列舉了 Go 代碼中會使用到的 25 個關鍵字或保留字:

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

程式一般由關鍵字、常量、變數、運算子、類型和函數組成。

程式中可能會使用到這些分隔字元:括弧 (),中括弧 [] 和大括弧 {}。

程式中可能會使用到這些標點符號:.、,、;、: 和 …。

8、Go 語言的空格

Go 語言中變數的聲明必須使用空格隔開,如:

var age int;

在 Go 程式設計語言中,資料類型用於聲明函數和變數。

資料類型的出現是為了把資料分成所需記憶體大小不同的資料,編程的時候需要用大資料的時候才需要申請大記憶體,就可以充分利用記憶體。

 

Go 語言按類別有以下幾種資料類型:

布爾型  --> 布爾型的值只可以是常量 true 或者 false。一個簡單的例子:var b bool = true。

整數型  --> 整型 int 和浮點型 float,Go 語言支援整型和浮點型數字,並且原生支援複數,其中位的運算採用補碼。

字串  --> 字串就是一串固定長度的字元串連起來的字元序列。Go的字串是由單個位元組串連起來的。Go語言的字串的位元組使用UTF-8編碼標識Unicode文本。

派生型  --> (a) 指標類型(Pointer)、(b) 數群組類型、(c) 結構化類型(struct)、(d) 聯合體類型 (union)、(e) 函數類型、(f) 切片類型、(g) 介面類型(interface)、(h) Map 類型、 (i) Channel 類型

變數

1、變數聲明

第一種,指定變數類型,聲明後若不賦值,使用預設值。

  1. var v_name v_type
  2. v_name = value      
var v_name v_typev_name = value

第二種,根據值自行判定變數類型。

var v_name = value

第三種,省略var, 注意 :=左側的變數不應該是已經聲明過的,否則會導致編譯錯誤。

v_name := value // 例如var a int = 10var b = 10c : = 10

執行個體如下:

package mainvar a = "張岩林很帥"var b string = "https://www.cnblogs.com/aylin/"var c bool func main(){    println(a, b, c)}

以上執行個體執行結果為:

張岩林很帥 https://www.cnblogs.com/aylin/ false

2、多變數聲明

//類型相同多個變數, 非全域變數var vname1, vname2, vname3 typevname1, vname2, vname3 = v1, v2, v3 var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要顯示宣告類型,自動推斷 vname1, vname2, vname3 := v1, v2, v3 //出現在:=左側的變數不應該是已經被聲明過的,否則會導致編譯錯誤  //類型不同多個變數, 全域變數, 局部變數不能使用這種方式var (    vname1 v_type1    vname2 v_type2)

如下:

package main var x, y intvar (  //這種只能出現在全域變數中,函數體內不支援    a int    b bool) var c, d int = 1, 2var e, f = 123, "hello" //這種不帶聲明格式的只能在函數體中出現//g, h := 123, "hello" func main(){    g, h := 123, "hello"    println(x, y, a, b, c, d, e, f, g, h)}

以上執行個體執行結果為:

0 0 0 false 1 2 123 hello 123 hello

如果你聲明了一個局部變數卻沒有在相同的代碼塊中使用它,同樣會得到編譯錯誤,例如下面這個例子當中的變數 a:

func main() {   var a string = "abc"   fmt.Println("hello, world")}

嘗試編譯這段代碼將得到錯誤 a declared and not used。

此外,單純地給 a 賦值也是不夠的,這個值必須被使用,所以使用

fmt.Println("hello, world", a)

但是全域變數是允許聲明但不使用。

Go 語言常量

常量是一個簡單值的標識符,在程式運行時,不會被修改的量。

常量中的資料類型只可以是布爾型、數字型(整數型、浮點型和複數)和字串型。

常量的定義格式:

const identifier [type] = value

多個相同類型的聲明可以簡寫為:

const c_name1, c_name2 = value1, value2

以下執行個體示範了常量的應用:

package main import "fmt" func main() {   const LENGTH int = 10   const WIDTH int = 5      var area int   const a, b, c = 1, false, "str" //多重賦值    area = LENGTH * WIDTH   fmt.Printf("面積為 : %d", area)   println()   println(a, b, c)   }

以上執行個體運行結果為:

面積為 : 501 false str

常量還可以用作枚舉:

const (    Unknown = 0    Female = 1    Male = 2)

數字 0、1 和 2 分別代表未知性別、女性和男性。

常量可以用len(), cap(), unsafe.Sizeof()常量計算運算式的值。常量運算式中,函數必須是內建函數,否則編譯不過:

package main import "unsafe"const (    a = "abc"    b = len(a)    c = unsafe.Sizeof(a)) func main(){    println(a, b, c)}

以上執行個體運行結果為:

abc 3 16

1、ota

iota,特殊常量,可以認為是一個可以被編譯器修改的常量。

在每一個const關鍵字出現時,被重設為0,然後再下一個const出現之前,每出現一次iota,其所代表的數字會自動增加1。

iota 可以被用作枚舉值:

const (    a = iota    b = iota    c = iota)

2、iota 用法

package main import "fmt" func main() {    const (            a = iota   //0            b          //1            c          //2            d = "ha"   //獨立值,iota += 1            e          //"ha"   iota += 1            f = 100    //iota +=1            g          //100  iota +=1            h = iota   //7,恢複計數            i          //8    )    fmt.Println(a,b,c,d,e,f,g,h,i)}

以上執行個體運行結果為:

0 1 2 ha ha 100 100 7 8

 

   

                

                

                

               

               

              

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.