41

Golang的一些基础语法范式

 5 years ago
source link: https://studygolang.com/articles/18456?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

主要记录一些Golang里面的基本语法范式,因为Golang这玩意实在语法和一般编程语言太特么不一样了...

数组和切片的初始化

切片是Golang中关于数组的一个概念,它很类似于SQL语言中的视图概念,即它类似一个实体数据的镜像或快照,同时一般情况下在Golang实际项目中我们也更多的会去使用切片而不是数组本体

// 数组的初始化
var array = [5]int                  // 仅声明
array := [5]int                     // 另外一种写法,也是一般函数体中用的更多的写法
array := [5]int{1, 2, 3, 4, 5}      // 定长数组声明且赋值
array := [...]int{1, 2, 3, 4, 5}    // 不定长数组声明且赋值

// 切片的初始化
slice := []int{}                    // 只声明,不赋值,不规定length,不规定cap
slice := make([]int, 5)             // 只声明,不赋值,只规定length,不规定cap
slice := make([]int, 5, 10)         // 只声明,不赋值,规定length,也规定cap
slice := []int{1, 2, 3, 4, 5}       // 声明且赋值

// 切片&数组添加元素
var s []int

// 添加一个空切片
s = append(s, 0)

// 这个切片会按需增长
s = append(s, 1)

// 可以一次性添加多个元素
params := []int{2, 3, 4}
s = append(s, params...)   // 这里类似于Python中的*符号可变参数传入

// 二维数组&切片的初始化方式
// 二维数组的初始化
array := [2][3]int{{1, 2, 3}, {4, 5, 6}}
for i := range array {
    for j := range array[i] {
        fmt.Printf("%v ", array[i][j])
    }
    fmt.Println()
}

// 二维切片的初始化
array := make([][]int, 5)

// 创建二维Slice,Gotour上的范例
func Create2DArray(dx, dy int) [][]uint8 {
    result := make([][]uint8, dx)
    for i := range result {
        result[i] = make([]uint8, dy)
        for j := range result[i] {
            result[i][j] = uint8((i + j) / 2)
        }
    }
    return result[:]
}

Golang的map

Golang的map基本可以说就是哈希表了

func main() {
        // 初始化map
    m := make(map[string]int)

        // 新增键值对
    m["Answer"] = 42
    fmt.Println("The value:", m["Answer"])
        
        // 修改键值对
    m["Answer"] = 48
    fmt.Println("The value:", m["Answer"])

        // 删除键值对
    delete(m, "Answer")
    fmt.Println("The value:", m["Answer"])

        // 判断键是否存在
    v, ok := m["Answer"]
    fmt.Println("The value:", v, "Present?", ok)
}

Golang中的系统最大值&最小值表示

maxNum := math.MaxInt32  // 系统32位整型最大值
minNum := math.MinInt32  // 系统32位整型最小值

Golang中的Channel(通道)初始化

channel := chan int                  // 单整型通道赋值,一旦传值没有goroutine接收立即报错
bufferedChannel := make(chan int, 3) // 长度为3的整型通道初始化,只有在传入次数超过3次时才会报错

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK