📖 目录
- 🌱 Go语言简介
- 🛠️ 开发环境搭建
- 👶 第一个Go程序
- 📝 基本语法
- 📊 数据类型
- 🎮 控制流程
- 🔧 函数
- 📦 包和模块
- 🏗️ 结构体和方法
- 🔌 接口
- 🧵 并发编程
- ❌ 错误处理
- 🧰 常用标准库
1. 🌱 Go语言简介
1.1 什么是Go?
Go(又称Golang)是由Google开发的静态类型、编译型、并发式编程语言,诞生于2009年。它结合了Python的开发效率和C语言的性能优势,特别适合构建高性能的分布式系统。
1.2 Go的六大核心优势
- 🚀 简洁高效:语法简单,学习曲线平缓
- ⚡ 高性能:编译成机器码,执行效率高
- 🧵 并发支持:原生支持goroutine和channel
- 🗑️ 垃圾回收:自动内存管理
- 🌐 跨平台:支持多平台编译
- 🔒 静态类型:编译时类型检查,安全性高
1.3 Go的典型应用场景
- 🖥️ 服务器端开发
- ☁️ 云原生/容器化应用(Docker、Kubernetes)
- 🌐 网络编程
- 📊 分布式系统
- ⌨️ 命令行工具
- 🛠️ 微服务架构
2. 🛠️ 开发环境搭建
2.1 安装Go
macOS(Homebrew)🍎
brew install go
Windows(winget)🪟
winget install GoLang.Go
验证安装 ✅
go version
2.2 推荐IDE
- 💻 VS Code:安装Go扩展(最轻量)
- 🚀 GoLand:JetBrains出品,功能强大
- 🧙 Vim/Neovim:安装vim-go插件
2.3 GOPATH与Go Modules
从Go 1.11开始,推荐使用Go Modules管理依赖:
# 初始化模块go mod init module_name# 下载依赖go mod tidy
3. 👶 第一个Go程序
3.1 Hello World
创建文件 main.go:
package mainimport"fmt"func main(){ fmt.Println("Hello, World! 🌍")}
3.2 运行程序
# 编译并运行go run main.go# 编译为可执行文件go build main.go./main
4. 📝 基本语法
4.1 变量声明
// 方法1:声明并初始化var name string="Alice"// 方法2:类型推断var age =25// 方法3:短变量声明(函数内)city :="Beijing"// 声明多个变量var( firstName string="John" lastName string="Doe")
4.2 常量
const PI =3.14159const(StatusOK=200StatusNotFound=404)
4.3 注释
// 单行注释 ✍️/* 多行 注释*/
5. 📊 数据类型
5.1 基础类型
// 布尔类型var isActive bool=true// 整数var a int=10// 有符号整数var b int8 =127// 8位有符号整数var c int16 =32767// 16位有符号整数// 浮点数var k float32 =3.14var l float64 =3.141592653589793// 字符串var q string="Hello, Go! 👋"
5.2 派生类型
// 切片(动态数组)slice :=[]int{1,2,3,4,5}// 映射(字典)m := map[string]int{ "apple":5, "banana":3,}// 结构体type Person struct{ Name string Age int}
5.3 类型转换
var i int=42var f float64 = float64(i)var u uint=uint(i)
6. 🎮 控制流程
6.1 if条件语句
score :=85if score >=90{ fmt.Println("优秀 🎖️")}elseif score >=60{ fmt.Println("及格 📚")}else{ fmt.Println("不及格 😢")}
6.2 for循环
// 基本形式for i :=0; i <10; i++{ fmt.Println(i)}// range遍历nums :=[]int{1,2,3,4,5}for index, value := range nums { fmt.Printf("Index: %d, Value: %d\n", index, value)}
6.3 switch语句
day :="Monday"switch day {case"Monday","Tuesday","Wednesday","Thursday","Friday": fmt.Println("工作日 💼")case"Saturday","Sunday": fmt.Println("周末 🎉")default: fmt.Println("无效的日期 ❌")}
7. 🔧 函数
7.1 基本函数
// 多返回值func divide(a, b int)(int, error){if b ==0{ return0, errors.New("除数不能为零 ➗")} return a / b,nil}
7.2 可变参数
func sum(nums ...int)int{ total :=0for _, n := range nums { total += n} return total}func main(){ fmt.Println(sum(1,2,3,4,5))// 输出: 15}
7.3 闭包示例
func counter() func()int{ count :=0 return func()int{ count++ return count }}func main(){next:= counter() fmt.Println(next())// 1 fmt.Println(next())// 2}
8. 📦 包和模块
8.1 包的概念
Go程序由包组成,每个文件开头声明包名:
package main // 主包 🚀package utils // 自定义工具包 🔧
8.2 导入包
import("fmt"// 标准库 📚"math"// 标准库 🧮"github.com/package"// 第三方包 📦 mypackage " ./mypackage"// 本地包(使用别名))
8.3 Go Modules
# 初始化模块go mod init github.com/username/project# 添加依赖go get github.com/pkg/errors# 整理依赖go mod tidy
9. 🏗️ 结构体和方法
9.1 定义结构体
type Employeestruct{ Namestring Salary float64 Address struct { // 嵌套结构体 City string Country string }}
9.2 方法示例
type Rectanglestruct{ Width float64 Height float64}// 值接收者方法func (r Rectangle)Area() float64 { return r.Width* r.Height}
10. 🔌 接口
10.1 定义接口
type Writerinterface{Write([]byte)(int, error)}type Readerinterface{Read([]byte)(int, error)}
10.2 空接口示例
// 空接口可以存储任何值var any interface{}="hello"any =42any =[]int{1,2,3}
11. 🧵 并发编程
11.1 Goroutine示例
func say(s string){for i :=0; i <5; i++{ fmt.Println(s)}}func main(){ go say("world")// 并发执行 say("hello")}
11.2 Channel示例
func sum(s []int, c chan int){ sum :=0for _, v := range s { sum += v} c <- sum // 发送结果到channel}func main(){ s :=[]int{7,2,8,-9,4,0} c := make(chan int) go sum(s[:len(s)/2], c) go sum(s[len(s)/2:], c) x, y :=<-c,<-c // 从channel接收 fmt.Println(x, y, x+y)}
12. ❌ 错误处理
12.1 错误处理哲学
Go使用返回错误值的方式处理错误:
func divide(a, b float64)(float64, error){if b ==0{return0, errors.New("division by zero ⚠️")}return a / b,nil}
12.2 自定义错误
type MyErrorstruct{CodeintMessagestring}func (e *MyError)Error()string{return fmt.Sprintf("Error %d: %s", e.Code, e.Message)}
13. 🧰 常用标准库
13.1 fmt - 格式化I/O
import"fmt"func main(){// 格式化输出 fmt.Printf("Name: %s, Age: %d\n","Alice",30)// Sprintf返回字符串 str := fmt.Sprintf("Pi: %.2f",3.14159)}
13.2 time - 时间处理
import"time"func main(){ now := time.Now() fmt.Println(now.Format("2006-01-02 15:04:05"))// 定时器 ticker := time.NewTicker(1* time.Second)<-ticker.C}
13.3 json - JSON处理
import"encoding/json"type Personstruct{Namestring`json:"name"`Ageint`json:"age"`}func main(){ p :=Person{Name:"Alice",Age:30} jsonData, _ := json.Marshal(p) fmt.Println(string(jsonData))}
💡 练习建议
- 基础练习:实现一个计算器,支持加减乘除运算
- 并发练习:实现生产者-消费者模型
- HTTP服务:使用net/http实现简单的REST API
- 项目实战:开发一个命令行Todo应用
📚 参考资源
- Go官方文档
- Go语言中文文档
- Go by Example