一、Go語言介紹
1. 介紹、優勢
- 部署簡單
- 靜態語言,但有動態語言的感覺
- 開發效率高 GC(內存垃圾回收機制)
- 支持併發
- 含很多第三方庫
2. 用來做什麼
- 服務器編程
- 分佈式系統
- 網絡編程
- 內存數據庫
- 雲平臺
二、基礎類型
1. 命名
- 字母或下劃線開頭
- 關鍵字不能用於自定義名字
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字符
- (1). byte
- 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: 使用默認格式輸出的內置或自定義類型的值