go语法

 

数组

声明

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])
    }
}