# Go语言基础 **Published by:** [myz](https://paragraph.com/@myz/) **Published on:** 2022-03-14 **URL:** https://paragraph.com/@myz/go ## Content https://tour.go-zh.org/list https://github.com/songleo/the-little-go-book_ZH_CNpackage变量,指针,函数,流程控制数组,切片,映射struct,方法,接口并发Part 1:基础语法包package main import ( "fmt" "math" ) func main(){ ... } 每个 Go 程序都是由包构成的。程序从 main 包开始运行。因此必须在源文件中非注释的第一行指明这个文件属于哪个包。import 导入其他包导出名首字母大写https://learnku.com/go/t/32464变量var 声明变量, const 声明常量var i int const Pi = 3.14 如果初始值已存在,可以省略类型。在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。没有明确初始值的变量声明会被赋予它们的 零值数值类型:0bool: falsestring: ””基本类型:bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 rune // int32 的别名 // 表示一个 Unicode 码点 float32 float64 complex64 complex128 指针类型 *T 是指向 T 类型值的指针,其零值为 nil。函数func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } 类型在变量名之后。参数:0个 - 多个。返回值:0个-多个,可被命名,会被视作定义在函数顶部的变量函数值/函数类型 函数也是值,可以像其它值一样传递,也可以用作函数的参数或返回值。 函数是一种类型 闭包 … …流程控制forfor i := 0; i < 10; i++ for sum < 1000 //相当于while if 同 `for` 一样, `if` 语句可以在条件表达式前执行一个简单的语句, 其中声明的变量可以在对应的 `else` 块中使用。 switch 没提到的case自动 break 无条件的switch可代替ifdefer 会将函数推迟到外层函数返回之后执行 (但其参数会立即求值)。栈,外层函数返回时后进先出。Part 2:struct 和方法1. struct声明和初始化type Vertex struct { X, Y int } func main() { v := Vertex{X: 1} //Y: 0 隐式赋予 p := &v v.X = 4 p.Y = 1e9 //指向结构体的指针p,可以隐式间接引用 fmt.Println(v) } 声明:字段后要带, 初始化:Name:赋值 未提到的自动赋予零值。 new(x) = &x{ }2. 方法方法就是一类带特殊的 接收者 参数的函数。Go 没有类,不过可以为结构体类型定义方法。 只能为同一包里新定义的类型和其指针声明方法。指针接收者的方法可以修改接收者指向的值。func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } 函数与方法的区别:以指针为接收者的方法被调用时,接收者既能为值又能为指针。3. 接口keyword:interface 接口是定义了合约但并没有实现的类型。接口有助于将代码与特定的实现进行分离。type Logger interface { Log(message string) } Part 3:数组和切片,映射1. 数组:var a [6]int{2, 3, 5, 7, 11, 13}2. 切片:3. 映射:Part 4: 并发… … ## Publication Information - [myz](https://paragraph.com/@myz/): Publication homepage - [All Posts](https://paragraph.com/@myz/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@myz): Subscribe to updates - [Twitter](https://twitter.com/MiaoBill): Follow on Twitter