Go语言学习笔记。
学习资源:
go 官网学习
A Tour of Go
菜鸟教程
Go by example
Outline
Basics
基础语法
- 程序结构
1 2 3 4 5
| package main import "fmt" func main() { fmt.Println("Hello, World!") }
|
变量声明
var a int = 10
, 类型后置- 短声明:
b := "hello"
, 无需类型声明,在函数内使用 - 常量:
const pi = 3.14
数据类型
- 基本类型:
int
, float64
, bool
, string
- 派生类型:指针、数组、结构体、切片、Map、通道
包管理
- 模块初始化
go mod init <module-name>
- 导入包
1 2 3 4
| import ( "fmt" "math/rand" )
|
- 包的导出名字母大写表示导出(public),小写表示私有(private)
- 包是Go的基本组织单位,类似于其他语言的库或模块,一个包 = 一个目录下所有的.go文件
流程控制
条件语句
1 2 3 4 5
| if x > 0 { } else { }
|
循环
1 2 3 4 5 6 7 8
| for i := 0; i < 5; i++ { }
for x < 100 { }
|
Switch
1 2 3 4 5 6
| switch day { case "Mon": fmt.Println("周一") default: fmt.Println("其他") }
|
相当于自动添加break
,可以使用 fallthrough
继续执行下一个 case。
数据结构
数组与切片
1 2 3 4 5 6
| arr := [3]int{1, 2, 3}
slice := []int{1, 2} slice = append(slice, 3)
|
Map
1 2 3
| m := make(map[string]int) m["age"] = 25 delete(m, "age")
|
结构体
1 2 3 4 5
| type Person struct { Name string Age int } p := Person{Name: "Tom", Age: 30}
|
Methods and Interfaces
函数
1 2 3 4 5 6 7 8
| func add(a, b int) int { return a + b }
func swap(x, y string) (string, string) { return y, x }
|
方法(接收者)
1 2 3 4 5
| type Circle struct { Radius float64 }
func (c Circle) Area() float64 { return 3.14 * c.Radius * c.Radius }
|
接口
1 2 3 4 5 6 7
| type Shape interface { Area() float64 }
func printArea(s Shape) { fmt.Println(s.Area()) }
|
Concurrency
Goroutine 和 Channel
1 2 3 4 5 6 7 8 9
| go func() { fmt.Println("并发执行") }()
ch := make(chan int) go func() { ch <- 1 }() value := <-ch
|
Select
1 2 3 4 5 6
| select { case msg1 := <-ch1: fmt.Println(msg1) case ch2 <- "hi": }
|
错误处理
1 2 3 4 5
| result, err := someFunction() if err != nil { log.Fatal(err) } defer file.Close()
|