go語言學習之路(一)


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_type
v_name = value

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

var v_name = value

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

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

實例如下:

package main
var 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 type
vname1, 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 int
var (  //這種只能出現在全局變量中,函數體內不支持
    a int
    b bool
)
 
var c, d int = 1, 2
var 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)   
}

以上實例運行結果為:

面積為 : 50
1 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

 

   

                

                

                

               

               

              

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM