Go基礎語法與控制結構
1. 環境配置與Hello World(擴展)
安裝指南
# 驗證安裝成功
$ go version
# 設置模塊代理(中國用戶推薦)
$ go env -w GOPROXY=https://goproxy.cn,direct
程序解剖
package main // 程序入口包聲明import "fmt" // 格式化IO包// main函數是程序唯一入口
func main() {// Println自動換行且支持Unicodefmt.Printf("當前Go版本: %s\n", runtime.Version())
}
2. 變量與數據類型(增強)
類型系統全景圖
零值機制
var (a int // 0b float64 // 0.0c string // ""d bool // false
)
類型別名
type Celsius float64 // 溫度類型
var temp Celsius = 36.6
3. 流程控制(增強)
條件語句進階
// 帶作用域的變量聲明
if file, err := os.Open("test.txt"); err != nil {fmt.Println("打開文件失敗:", err)
} else {defer file.Close()// 處理文件內容
}
Switch黑科技
// 類型判斷switch
var val interface{} = 3.14
switch val.(type) {
case int:fmt.Println("整數類型")
case float64:fmt.Println("雙精度浮點")
default:fmt.Println("未知類型")
}// 表達式缺失的switch
score := 85
switch {
case score >= 90:fmt.Println("A")
case score >= 80:fmt.Println("B")
case score >= 70:fmt.Println("C")
}
循環控制全景
// 死循環寫法
for {// 需要內部break退出
}// range迭代(后續章節詳解)
words := []string{"Go", "Java", "Python"}
for index, word := range words {fmt.Printf("%d:%s ", index, word)
}
// 輸出:0:Go 1:Java 2:Python
4. 函數定義(增強)
函數特性矩陣
特性 | 示例 | 說明 |
---|---|---|
可變參數 | func sum(nums …int) | 類似Python的*args |
匿名函數 | func() { /…/ }() | 立即執行函數 |
閉包 | 計數器工廠函數 | 捕獲外部變量 |
延遲執行 | defer資源清理 | FILO順序執行 |
閉包示例
func counter() func() int {count := 0return func() int {count++return count}
}c := counter()
fmt.Println(c(), c(), c()) // 1 2 3
錯誤處理規范
func loadConfig(path string) (*Config, error) {file, err := os.Open(path)if err != nil {return nil, fmt.Errorf("配置加載失敗: %w", err)}defer file.Close()// 解析配置...return &config, nil
}
5. 實戰演練:溫度轉換程序
package mainimport "fmt"type Celsius float64
type Fahrenheit float64func CToF(c Celsius) Fahrenheit {return Fahrenheit(c*9/5 + 32)
}func FToC(f Fahrenheit) Celsius {return Celsius((f - 32) * 5 / 9)
}func main() {var c Celsius = 100fmt.Printf("%v°C = %v°F\n", c, CToF(c))f := Fahrenheit(212)fmt.Printf("%v°F = %v°C\n", f, FToC(f))
}
graph TDA[開始] --> B[輸入溫度值]B --> C{選擇轉換方向}C -->|C→F| D[調用CToF函數]C -->|F→C| E[調用FToC函數]D --> F[輸出結果]E --> FF --> G[結束]
Go復合類型與內存管理
1. 數組與切片(增強)
底層關系圖解
切片擴容機制
s := []int{1,2,3}
fmt.Printf("原始容量: %d\n", cap(s)) // 3s = append(s, 4)
fmt.Printf("擴容后容量: %d\n", cap(s)) // 6(Go 1.18+策略)
2. 映射與結構體(增強)
嵌套結構體
type Address struct {City stringZipCode int
}type User struct {Name stringAge intAddress // 匿名嵌入
}func main() {u := User{Name: "張三",Age: 25,Address: Address{City: "北京",ZipCode: 100000,},}fmt.Println(u.City) // 直接訪問匿名字段
}
3. 接口與反射(新增章節)
接口實現原理
類型斷言示例
var val interface{} = "hello"if s, ok := val.(string); ok {fmt.Println(s)
} else {fmt.Println("不是字符串類型")
}
?實戰項目建議?:嘗試開發一個簡單的學生管理系統,要求:
- 使用結構體存儲學生信息(姓名、學號、成績)
- 使用切片實現數據存儲
- 實現增刪改查功能
- 支持數據持久化存儲
建議配合官方文檔 https://golang.org/doc 進行深入學習。