Go語言初識

一、Go語言介紹

1. 介紹、優勢

  1. 部署簡單
  2. 靜態語言,但有動態語言的感覺
  3. 開發效率高 GC(內存垃圾回收機制)
  4. 支持併發
  5. 含很多第三方庫

2. 用來做什麼

  1. 服務器編程
  2. 分佈式系統
  3. 網絡編程
  4. 內存數據庫
  5. 雲平臺

二、基礎類型

1. 命名

  1. 字母或下劃線開頭
  2. 關鍵字不能用於自定義名字

2. 變量:

1). 變量聲明
  • 變量聲明瞭必須要使用
  • 只是聲明沒有初始化的變量,默認爲0 同一個{}裏
  • 聲明的變量名唯一
  • 可以同時聲明多個變量
2). 變量初始化:
  • 聲明變量時,同時賦值
3). 自動推導類型
  • 必須初始化,通過初始化的值來確定類型

c := 30

  • 已經有變量c後,不能再新建一個變量c
    • 例:再次初始化聲明c := 20
4). 多重初始化

a, b, c := 10, 20, 30

5). 變量賦值
  • 可以多重賦值
6). 匿名變量
  • _ 是特殊的變量名,任何賦予它的值都會被丟棄

3. 常量

  • 程序運行期間,不可以改變的量
  • 常量不允許修改
  • 常量自動推導類型只要=,不需要:=
1). 多個變量或常量定義
  • 變量定義
    var (
    	a int
    	b float 64
    )
    
    a, b = 10, 2.11
    fmt.Println("a = ", a)
    fmt.Println("b = ", b)
    
  • 常量定義
    const (
    	i int = 10   
    	j float64 = 2.22   
    	 
    	// 可以自動推導類型
    	// i = 10
    	// j = 2.22
    )
    
    fmt.Println("i = ", i)
    fmt.Println("j = ", j)
    
2). iota枚舉
  • iota常量自動生成器, 每隔一行,自動累加1
  • iota給常量賦值使用
  • iota遇到const,重置爲0
  • 可以只寫一個iota
  • 如果是同一行,值都一樣

4. 基礎數據類型

1). 布爾類型
  • 沒有初始化時的初始值爲false
// 聲明變量
var a bool
a = false

// 自動推導的兩種方法:
var a = false
b := false
2). 整型
3). 浮點型
  • 默認值爲float64
  • float64存儲小數比float32更準確
4). 字符類型
  • 支持兩種字符類型
    • (1). byte
      • 是uint8的別名
      • 代表utf-8字符串的單個字節的值
    • (2). rune
      • 代表單個unicode字符
  • ascii碼
    • 65 ‘A’
    • 97 ‘a’
    • 10 ‘\n’ 換行
5). 字符串
  • 內建函數:len()
  • 字符和字符串區別
    • 字符:單引號
      • 往往只有一個字符,轉義字符除外
    • 字符:串雙引號
      • 一個或多個字符組成
      • 字符串都是隱藏了一個結束符,’\0’
        var ch byte
        var str string
        
        ch = 'a'
        str = "a" // 由'a'和‘0’組成了一個字符串
        
        str = 'hi yyy'
        fmt.Printf("str[0] = %c, str[1] = %c', str[0], str[1])
        
6). 複數類型
  • 複數實際上由兩個實數構成,一個表示實部, 一個表示虛部
    • real()

    • imag()

      var t complex128    // 聲明
      t = 2.1 + 3.14i    // 賦值
      fmt.println("t = ", t)
      
      // 自動推導類型
      t2 := 3.2 + 2.3i
      
      // 通過內建函數取實部、虛部
      fmt.Println(real(t2),  imag(t2))
      

5. 輸入的使用

var v int
fmt.printf("請輸入一個整型: ")
// 兩種方法:
fmt.Scanf("%d", &v)
fmt.Scan(&v)

6. 類型轉換

  • 允許隱式轉換,所有類型轉換必須顯式聲明
  • 轉換隻能發生在兩種相互兼容的類型之間

7. 類型別名

type bigint int64 //int64類型改名爲bigint
var x bigint = 100

type (
    myint int    //int改名爲myint
    mystr string //string改名爲mystr
)

三、運算符

  • Go語言的bool類型和int不兼容

四、 流程控制

1. 選擇結構

1). if … .else
  • 支持初始化表達式, 初始化和條件表達式用分號分隔
  • 左大括號必須和條件語句或else在同一行
  • if … else if … else
2). switch語句
  • go裏的switch相當於每個case後帶有break,匹配成功後跳出整個switch
  • 可以用fallthrough強制執行後邊的case代碼

2. 循環語句

1). for
sum := 0
// 初始條件; 判斷條件是否爲真; 如果爲真,執行循環體,爲假跳出循環體
for i := 1; i <= 100; i++ {
	sum = sum + i
}
2). range
  • 迭代
  • 返回兩個值,第一個返回值是元素的數組下標,第二個返回值是元素的值
    str = 'hello'
    for i , data := range str {
    	fmt.Printf("str[%d]=%c\n, i, data)
    }
    
    for i := range str {  //第二個返回值默認丟棄
        fmt.Printf("%c\n", str[i])
    }
    

3. 跳轉語句

1). break和continue
  • break
    • 跳出當前循環
  • continue
    • 跳過本次循環
2). goto
  • 用goto跳轉必須在當前函數內定義的標籤

五、其他:

1. 導入包必須要使用

2. 賦值前必須先聲明變量

3. 字符是單引號

4. Println和Printf區別

  • Println:一段一段處理,自動加換
  • Printf:格式化輸出

fmt.Println(“a = %d\n”, a)
fmt.Printf(“a = %d, b=%d”, a, b)

  • %c: 以字符方式打印
  • %d: 以整型方式打印
  • %s: 以字符串打印
  • %f: 以標準計數法表示的浮點數或複數值
  • %T: 使用Go語法輸出的值的類型
  • %v: 使用默認格式輸出的內置或自定義類型的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章