go语言基础知识
一、Go语言简介
- 诞生背景
- 由Google工程师Robert Griesemer、Rob Pike和Ken Thompson于2007年设计
- 2009年正式发布,2024年最新版本为Go 1.22
- 设计目标:解决大规模系统开发中的编译速度、依赖管理和并发处理问题
- 核心特性
- 编译型语言(编译为机器码)
- 静态类型检查
- 垃圾回收机制(GC)
- 原生并发支持(goroutine + channel)
- 简洁的语法(约25个关键字)
- 跨平台编译能力
- 内置强大标准库
二、基础语法结构
go
1// Hello World示例
2package main
3
4import "fmt"
5
6func main() {
7 fmt.Println("Hello, 世界!")
8}
三、核心编程要素
- 变量与常量
go
1var name string = "Go" // 显式声明
2age := 10 // 类型推断(短声明)
3const PI = 3.14 // 常量
- 数据类型
- 基本类型:
bool,string,int系列,float32/64,complex64/128 - 复合类型:
array,slice,map,struct,pointer,channel,func - 特色类型:
slice(动态数组):make([]int, 5)map(字典):m := make(map[string]int)
- 函数特性
go
1// 多返回值、命名返回值
2func calc(a, b int) (sum int, diff int) {
3 sum = a + b
4 diff = a - b
5 return // 自动返回命名返回值
6}
- 流程控制
go
1// if支持简短语句
2if x := getValue(); x > 0 {
3 // ...
4}
5
6// for循环(无while)
7for i := 0; i < 10; i++ { /*...*/ }
8
9// switch(无需break)
10switch os := runtime.GOOS; os {
11case "darwin":
12 fmt.Println("macOS")
13default:
14 fmt.Println(os)
15}
四、面向对象特性
- 结构体与方法
go
1type User struct {
2 Name string
3 Age int
4}
5
6// 方法定义(值接收者)
7func (u User) SayHello() {
8 fmt.Printf("Hi, I'm %s", u.Name)
9}
10
11// 指针接收者(可修改结构体)
12func (u *User) UpdateAge(newAge int) {
13 u.Age = newAge
14}
- 接口(隐式实现)
go
1type Writer interface {
2 Write([]byte) (int, error)
3}
4
5type FileWriter struct{}
6
7func (fw FileWriter) Write(data []byte) (int, error) {
8 // 实现接口...
9}
五、并发编程
- goroutine
go
1go func() {
2 fmt.Println("异步执行")
3}()
- channel
go
1ch := make(chan int, 3) // 缓冲通道
2ch <- 42 // 发送
3val := <-ch // 接收
4
5// 通道同步示例
6func worker(ch chan<- int) {
7 ch <- 1
8}
9
10func main() {
11 ch := make(chan int)
12 go worker(ch)
13 <-ch
14}
六、错误处理
go
1// 典型错误处理模式
2result, err := SomeOperation()
3if err != nil {
4 // 处理错误
5}
6
7// defer机制
8func readFile() {
9 file, err := os.Open("test.txt")
10 if err != nil { /*...*/ }
11 defer file.Close() // 确保资源释放
12 // 处理文件...
13}
七、包管理
- Go Modules
bash
1go mod init example.com/project # 初始化模块
2go get github.com/pkg/errors # 添加依赖
- 常用标准库
fmt: 格式化I/Oio: 基础IO操作net/http: HTTP协议支持os: 操作系统交互sync: 并发同步
八、实战示例
并发HTTP请求
go
1func fetch(url string, ch chan<- string) {
2 resp, err := http.Get(url)
3 if err != nil {
4 ch <- fmt.Sprint(err)
5 return
6 }
7 defer resp.Body.Close()
8 ch <- fmt.Sprintf("%s -> %d", url, resp.StatusCode)
9}
10
11func main() {
12 urls := []string{"https://go.dev", "https://google.com"}
13 ch := make(chan string)
14
15 for _, url := range urls {
16 go fetch(url, ch)
17 }
18
19 for range urls {
20 fmt.Println(<-ch)
21 }
22}
浙公网安备 33010602011771号