ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

重温Go语法笔记 | 容器

2022-09-11 00:32:18  阅读:228  来源: 互联网

标签:切片 nil map int fmt 重温 语法 Println Go


  • 容器
    • 数组的声明

      // 初始化声明
      q := [...]int{1,2,3}
      
      // 仅声明
      var a [3]int
      
    • 切片

      切片的概念
      对数组连续片段的引用

      // 根据数组生成切片
      var a = [3] int {1,2,3}
      fmt.Println(a[1:2])
      
      // 初始化声明切片
      a := []int{1,2,3}
      
      // 直接声明一个新的切片
      var strList [] string
      
      // 使用make函数构造切片
      b  make([]int, 2, 10)
      
      • append 为切片添加元素

        切片动态添加元素

        var number [] int
        number = number.append(number, 1)
        
      • 切片拷贝

        copy(destList, cList) // 将当前列表所有元素,拷贝到目标列表中
        
      • 切片删除

        // 通过下标的方式
        a := []int {1,2,3}
        a = a[1:] // 删除开头一个元素
        // 通过append()方式
        a = append(a[:0], a[1:]...) // 将第一个元素后的所有元素append到新的切片中
        // 通过copy()方式
        a = a[:copy(a, a[1:])]
        
      • 切片的遍历

        for index, value := range slice {
          fmt.Println(index)
          fmt.Println(value)
        }
        
    • map

      即使map会动态伸缩,但是最好表明

      • map的声明

        m := make(map[string] int, 10)
        n := make(map[string] []int) // 切片为map的值
        n := make(map[string] *[]int)
        
      • map的遍历

        for k, v in range m {
          fmt.Println(k, v)
        }
        
      • map元素的删除和清空

        delete()函数

        m := make(map[string]int)
        m["name"] = "mkl"
        delete(m. "name")
        

        Go没有提供清空所有元素的函数,唯一的方法就是重新make一个map

    • sync.map

      通常并发需要加锁,go提供了高效的sync.Map提供效率高并发安全的数据结构

      1.无须初始化,直接声明
      2.与map操作方式不同,使用Store存储,Load获取,Delete删除
      3.遍历需要Range配合回调函数来迭代
      
      func main() {
        var m sync.Map
        m.Store("name", "mkl") // 存
        fmt.Println(m.Load("name")) // 取
        m.Delete("name") // 删除
      
        m.Range(func(k, v interface{}) bool {
          fmt.Println(k, v)
          return true // 返回false终止迭代
        })
      }
      
    • 列表 list (双向链表)

      实现高效的插入和删除

      • 初始化list
        m := list.New() // 方式一
        var m list.List // 方式二
        
      • 在列表中插入元素
        m := list.New()
        m.pushBack("end")
        m.pushFront(100)
        // InsertAfter()
        // InsertBefore()
        // PushBackList()
        // PushFrontList()
        
      • 从列表中删除元素

        元素在插入时会返回 *list.Element指针

        element := m.pushBack("end")
        m.Remove(element)
        
      • 遍历列表
        for i:= m.Front(); i != nil; i = i.Next() { // Front表示厨师赋值
          fmt.Println(i.Value)
        }
        
    • Go中的nil 空值/零值

      布尔零值为false,数值零值为0,字符串零值"",指针、切片、映射、通道、函数和接口零值为nil

      • nil标识符不能比较
      • nil不是关键字或保留字
      • nil没有默认类型
      • 不同类型的nil指针是一样的
      • 不同类型nil值占用的内存大小可能是不一样的

        unsafe.Sizeof(m)

标签:切片,nil,map,int,fmt,重温,语法,Println,Go
来源: https://www.cnblogs.com/miaokela/p/16683272.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有