• 容器

    • 数组的声明

      // 初始化声明
      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)

重温Go语法笔记 | 容器的更多相关文章

  1. SQL基础语法笔记教程整理

    PS:本文适用SQL Server2008语法. 一.关系型数据库和SQL 实际上准确的讲,SQL是一门语言,而不是一个数据库. 什么是SQL呢?简而言之,SQL就是维护和使用关系型数据库中的的数据的 ...

  2. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  3. SQL 基础语法笔记教程整理

    最近从图书馆借了本介绍 SQL 的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用. PS:本文适用 SQL Server2008 语法. 首先,附一个发现的 MySQL 读书笔 ...

  4. [python] Pythonic语法笔记

    Pythonic语法笔记 __new__ 在类实例化之前执行的,也就是在init之前执行,可以为这个类写操作.接受的参数不是self而是cls.只有在new方法里返回类才会执行init操作,需要返回父 ...

  5. scala学习笔记(1):基本语法与容器

    1 var 可变,val 不可变 var (a,b) = (10,20) 分别对a,b赋值 a=10, b=20 var a,b = (10,20)则 是a=(10,20) b=(10,20) 2 L ...

  6. SQL Server 常用高级语法笔记

    自从用了EF后很少写sql和存储过程了,今天需要写个比较复杂的报告,翻出了之前的笔记做参考,感觉这个笔记还是很有用的,因此发出来和园友分享. 1.case...end (具体的值)case后面有值,相 ...

  7. C#语言不常用语法笔记

    只看过3天C#语法书,了解个大概,与C++等不同之处,或者看开源遇到一些奇异用法,记录一下,脑子不够用的情况下,还是记笔记靠谱. ==================== 顺便吐槽下,这年头得会各种编 ...

  8. solr使用语法笔记

    http://127.0.0.1:8095/shangbiao_sale/select?sort=id+desc&fq=&wt=json&json.nl=map&q=s ...

  9. 重温JSP学习笔记--与日期数字格式化有关的jstl标签库

    上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...

  10. 重温JSP学习笔记--JSP动作标签

    上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...

随机推荐

  1. OpenPSG:离AGI再进一步,首个开放环境关系预测框架 | ECCV'24

    全景场景图生成(PSG)的目标是对对象进行分割并识别它们之间的关系,从而实现对图像的结构化理解.以往的方法主要集中于预测预定义的对象和关系类别,因此限制了它们在开放世界场景中的应用.随着大型多模态模型 ...

  2. 浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题

    作者:来自 vivo 互联网存储团队- Yuan Jianwei 本文介绍了 TiKV 磁盘空间问题的排查思路与解决方案. 一.背景介绍 在业务快速扩张的年代,vivo 内部的很多业务为了可以快速上线 ...

  3. CentOS 7环境下DM8数据库的安装与配置

    一.环境准备 首先,确保你的系统已经安装了CentOS 7,并且具有足够的磁盘空间和内存来支持DM8数据库的运行.此外,你还需要具备管理员权限,以便进行后续的安装和配置操作. 二.下载DM8安装包 访 ...

  4. vue3 js 学习笔记

    Vue3-js 学习笔记 目录 Vue3-js 学习笔记 目录 前言 reactive 数据绑定 事件绑定 生命函数周期 计算属性-computed props emit-自定义事件 ref-获取元素 ...

  5. 异源数据同步 → 如何获取 DataX 已同步数据量?

    开心一刻 今天,表妹问我:哥,我男朋友过两天要生日了,你们男生一般喜欢什么,帮忙推荐个礼物呗我:预算多少表妹:预算300我:20块买条黑丝,剩下280给自己买支口红,你男朋友生日那天你都给自己用上表妹 ...

  6. Linux进程监控系统

    目录 动态监控进程 top 基本语法 关键信息说明 第一行:系统信息 第二行:进程信息 第三行:CPU占用情况 第四行:内存信息 第五行:交换区信息 交互操作 操作选项 应用实例 监控网络状态 net ...

  7. 返璞归真!使用 alpinejs 开发交互式 web 应用,抛弃 node_modules 和 webpack 吧!

    前言 最近一直在使用 DjangoStarter 开发各种小项目,之前我是比较喜欢前后端分离的,后端用 Ninja API,前端 nextjs,开发起来也挺舒服的,交互体验也比较好. 不过我在网上冲浪 ...

  8. Apache Tomcat AJP 实现负载均衡

    大部分一开始接触WEB服务器的人可能和我一样对为什么有Apache又有Tomcat服务器感到奇怪(它们还都是Apache开发的呵呵),其实他们不是冗余的服务器,虽然他们都能对外提供WEB服务器,但总的 ...

  9. golang之验证器validator

    快速安装 使用之前,我们先要获取validator这个库. # 第一次安装使用如下命令 go get github.com/go-playground/validator/v10 # 项目中引入包 i ...

  10. pycharm之远程开发

    转载:https://amos-x.com/index.php/amos/archives/pycharm-remote/ 前言 远程开发什么意思? 远程开发就是用本地的个人电脑进行代码编写开发,但是 ...