数组
声明
var array[10] int32
var array[5] float32
初始化
长度固定
var array = [5]int32 {1, 2, 3, 4, 5}
array := [5]int32 {1, 2, 3, 4, 5}
长度不确定
使用 ...
代替数组的长度
编译器会根据元素个数自行推断数组的长度
var array = [...]int32 {1, 2, 3, 4, 5}
array := [...]int32 {1, 2, 3, 4, 5}
切片
package main
import "fmt"
func main() {
var a []int
b := []int{2, 3, 4}
// 单个添加
a = append(a, 1)
// 添加数组
a = append(a, b...)
for _, v := range a {
fmt.Println(v)
}
}
排序
package main
import (
"fmt"
"sort"
)
func main() {
a := []int{3, 4, 5, 1, 2}
sort.Ints(a)
for _, v := range a {
fmt.Println(v)
}
}
控制流
defer
defer 语句会推迟函数(包括任何参数)的运行, 直到包含 defer 语句的函数完成
package main
import (
"fmt"
)
func main() {
defer fmt.Println("deferred", 100)
for i := 0; i < 4; i++ {
fmt.Println("regular", i)
}
}
regular 0
regular 1
regular 2
regular 3
deferred 100
defer 语句按逆序运行, 先运行最后一个, 最后运行第一个
package main
import "fmt"
func main() {
for i := 1; i <= 4; i++ {
defer fmt.Println("deferred", -i)
fmt.Println("regular", i)
}
}
regular 1
regular 2
regular 3
regular 4
deferred -4
deferred -3
deferred -2
deferred -1
结构体
定义
type identifier struct {
field1 type1
field2 type2
...
}
初始化
new
使用 new 函数给一个新的结构体变量分配内存, 它返回指向已分配内存的指针
package main
import "fmt"
type Student struct {
id int
name string
school string
}
func main() {
stu := new(Student)
stu.
}
命令行参数
package main
import (
"fmt"
"os"
)
func main() {
for i := 1; i < len(os.Args); i++ {
fmt.Println(os.Args[i])
}
}