Go 基礎(非常基礎)
1 // package main 和 main 函式 2 package main 3 func main() {} 4 5 //每一個.go檔案都需要有 package 關鍵詞,並且宣告在檔案頂部 6 package pkgName 7 8 // import 用來匯入依賴包 9 import "name" 10 11 // 常量定義 - const NAME type = value 12 const NAME string = "xiaoming" 13 14 // 全域性變數的定義 - var ... 15 var name string = "xiaohei" 16 17 // 一般型別宣告(定義變數的型別) - type ...18 type learn string 19 20 // 宣告結構 21 type Learn struct { 22 // ... 23 } 24 25 // 宣告介面 26 type Learn interface 27 28 // 函式的定義 29 func fn () {}
package
package是最基本的分發單位和工程管理中依賴關係的體現;
原始檔開頭需要宣告package;
要生成可執行程式,要有package main 和 main函式;
同一個路徑要只能有一個package
import
1 //方式一 2 import "package1" 3 import "package2" 4 import "package3" 5 6 // 方式二 7 import ( 8 "package1" 9 "package2" 10 )
原理:
import 匯入,是按順序匯入;
匯入包中含有其他依賴包,會先匯入依賴包,初始化其中的常量和變數,如果有init函式,還會執 行init();
所有包匯入完成後,才會對main中和常量和變數進行初始化,如果main中有init函式,先執行init(),在執行main函式;
一個包被匯入多次,但實際只會匯入一次;
import _ "pkg" 會匯入該包,但不會執行整個包,而是執行包中的init函式(簡單點說,就是這樣做會到時自動執行包的init(),註冊包引擎,關於這個包就無需其他操作了);
import . "pkg" 可以不加包名,直接方法
別名用法:
import alias "pkg"
資料型別
1. 數值型別(整型、浮點型、複數、其他)、字串型別、布林型別
2. 派生型別
指標型別(Pointer)
陣列型別
結構化型別(struct)
Channel型別 (chan)
函式型別(func)
切片型別(slice)
藉口型別(interface)
Map型別(map)
3. 型別零值和類型別名
型別零值:變數被宣告之後的預設值
不同型別的變數是不能進行運算的
unsafe包
unsafe 庫讓 golang 可以像C語言一樣操作計算機記憶體(不推薦使用此包)
type ArbitraryType int
type Pointer *ArbitraryType
func Sizeof(x ArbitraryType) uintptr
func Offsetof(x ArbitraryType) uintptr
func Alignof(x ArbitraryType) uintptr
常量宣告
// 顯式 const name type = value // 隱式(無型別常量) const name = value // * 常量只支援數值、布林、字串型別
變數宣告
// 單個宣告 var name [type] = value // 多個宣告 var a, b, c [type] = v1, v2, v3 //簡寫 a, b := v1, v2 // 分組宣告 var ( a [type] b [type] c [type] )
全域性變數必須使用var宣告 | 特殊變數使用下劃線
型別轉換
// 型別轉換必須是顯示的 // 型別轉換隻能發生在兩種相容型別之間 var a = 1 var b float32 b = float32(a)
變數可見性規則
大寫字母開頭的變數是公有變數,可以被其他包讀取
小寫字母開頭的變數是私有變數
流程語句
// if - else if a > 0 {} if a > 0 { } else { }
switch name { case v1: .. case v2: .. default: .. }
for init; condition; post {}
// 待續