• 数组

    1.数组的长度需要声明
    2.存储的数据类型必须一致
    3.可以通过下标来访问,超出长度问报访问越界的错误
    4.不支持负数索引
    5.数组是值类型,传递的都是拷贝,不会对原来的对象进行修改
    6.Go中不存在深拷贝和浅拷贝,都是值传递
    • 初始化数组
      a1 := [3] {"mkl", "klm", "lkm"}
      a2 := [...] {"mkl", "klm", "lkm"}
    • 多维数组初始化
      // 内部的数组元素不可以使用...来声明数量
      // 另起一行花括号需要加逗号 不换行可以不加
      a := [...][2] string {
      {"a", "b"},
      {"a", "b"},
      {"a", "b"},
      }
  • 切片

    1.基于数组,自动扩容,更换数组
    2.结构包含:地址、长度、容量
    3.切片不支持直接比较,只能和nil进行比较
    4.cap()获取容量(底层数组能存储的容量),len()获取长度
    理解方式:切片代表一个公司,数组代表办公地点,公司人员扩充,办公地点更变,
    换一个工作多的办公地点。扩容必定换了内存地址。
    5.字符串也支持切片表达式
    6.*对切片再进行切片,切片的上限为容量,而不是长度
    7.完整切片表达式[low:high:max]
    8.make函数初始化,一旦申请内存空间,就不等于nil,最好一次性将内存申请到位,避免运行时扩充消耗
    9.判断切片是否为空 len(s) == 0 而不是与nil比较,nil切片没有底层数组
    • 初始化切片

      var s1 []int // 切片声明
      s2 := [5]int {1,2,3,4,5}
      s3 := s2[1:3] // 切片表达式,基于数组s2按索引去取,左包含,右不包含

      切片再切片

      a := [3]int{1, 2, 3}
      b := a[0:2]
      c := b[1:3]
      fmt.Println(a)
      fmt.Println(b)
      fmt.Println(c)
      // [1 2 3]
      // [1 2]
      // [2 3]
      // 修改底层数组
      a[1] = 100
      fmt.Println(a)
      fmt.Println(b)
      fmt.Println(c)
      // [1 100 3]
      // [1 100]
      // [100 3]

      切片完整表达式

      // 默认切片的容量是切片的开始索引到数组的最后
      // 0 <= low < high <= max
      // max 指的是high能取到的最大值 影响切片的容量
      // 最终切片的容量是max-low
      a := []int {1,2,3,4,5}
      s1 := a[1:2:3]
      fmt.Println(s1, len(s1), cap(s1))

      make()初始化 申请内存空间

      // 容量可以省略
      a := make([]int, 2, 10) // make([]T, size, cap)

      字面量初始化

      s := []int{1,2,3}
    • 切片的拷贝

      a := []int {1,2,3}
      b := make([]int, len(a))
      copy(b, a) // 将切片a中的值拷贝到切片b中,必须声明b的长度,不然无法装载被拷贝对象a的元素
    • 切片的遍历与append

      // 索引遍历
      s := []int {1,2,3,4}
      for i:= 0; i< len(s); i++ {
      fmt.Println(i)
      }
      // range遍历
      for i, v := range(s) [
      fmt.Println(i)
      ]

      append()添加元素

      // append() 必须接受返回值
      // append()函数可能触发切片的扩容,如果不接收返回值,那么操作之后的切片对象还是原来的切片地址
      // 添加单个元素
      s := []string
      s := append(s, "d")
      // 添加一个切片中所有元素
      s1 := []string{"a", "b"}
      s2 := append(s, s1...)
    • 切片删除元素

      // 通过切片拼接的方式,实现根据下标删除元素的的效果
      var s = []int {1,2,3}
      s = append(s[:1], s[2:]...)
  • map

    无序的key,value结构

    • 初始化map
      m := make(map[string]int, 10) // 可以声明容量,减少动态扩容
      // 字面量初始化
      m := map[string]string{
      "username": "mkl"
      "password": "123"
      }
    • 取值
      v, ok := m["username"]
    • 遍历
      for k, v := range m {
      Println(k, v)
      }
    • 删除

      delete() 删除键值对,没有返回值

      delete(m, "username")

数组 | 切片 | map | Go语言的更多相关文章

  1. Go语言学习笔记(三)数组 & 切片 & map

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 数组 Arrays 数组是同一种数据类型的固定长度的序列. 数组是值类型,因此改变副本的值,不会改变本身的值: 当 ...

  2. Go语言学习之4 递归&闭包&数组切片&map&锁

    主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...

  3. go语言学习-数组-切片-map

    数组 go语言中数组的特点: 数组的长度是固定的,并且长度也是数组类型的一部分 是值类型,在赋值或者作为参数传递时,会复制整个数组,而不是指针 定义数组的语法: var arr1 = [5]int{1 ...

  4. golang(4):函数 & 数组 & 切片 & map & 锁

    内置函数 // 1. close:主要用来关闭channel // 2. len:用来求长度,比如string.array.slice.map.channel // 3. new:用来分配内存,主要用 ...

  5. Go语言中的数组与数组切片

    Go中的数组与C的数组一样,只是定义方法不同 c: int a[10][10] Go [10][10]int 定义并初始化 array1 := [5]int{1,2,3,4,5} 变量名 := [in ...

  6. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

  7. go语言 类型:数组切片

    初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切 ...

  8. GO 语言学习笔记--数组切片篇

    1.对于make 数组切片,长度和容量需要理解清楚: 容量表示底层数组的大小,长度是你可以使用的大小: 容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否 ...

  9. 窥探Swift之数组安全索引与数组切片

    今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...

  10. Go-常识补充-切片-map(类似字典)-字符串-指针-结构体

    目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散 ...

随机推荐

  1. Unreal RecastNavigation 开源项目详解

    0 前言 Recastnavigation是一个游戏AI导航库,像Unity,UE引擎中都集成了这个开源项目, HALO中使用的也是这个开源库.导航最重要的就是为NPC寻路,以及其他的寻路需求. 需要 ...

  2. Web渗透08_文件上传

    1 文件上传漏洞概述 文件上传几乎是每一个web,或者说是任何 服务器客户端模式 应用的必备功能,用户在自己的文章,博文中要上相关图片.用户上传自己的头像.网盘用户上传各种文件.等等.若服务器对此没有 ...

  3. springboot实现验证码校验

    验证码校验共三步 1.创建验证码 2.发送验证码 3.验证码校验 创建生成验证码的工具类 public class RandomValidateCode { private Random random ...

  4. 指针进阶(C语言终)

    1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候,我们学习了sizeof , sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是 ...

  5. .NET 全能高效的 CMS 内容管理系统

    前言 推荐一款强大的企业级工具 - SSCMS 内容管理系统. SSCMS 为企业级客户设计,完全开源免费,适用于商业用途且无需支付任何产品或授权费用. 本文将详细介绍 SSCMS 系统的功能.用户界 ...

  6. “应用程序无法正常启动(0xc000007)”处理办法

    前几天使用非静态方式编译了一个程序,在部分系统上运行提示缺少msvcp140.dll,就从VS2019安装目录找了一个同名文件放在了程序同级目录,程序也可以正常运行了.今天重新打开虚拟机,突然就报了这 ...

  7. 5.4 Linux Vim基本操作

    <Vim三种工作模式>一节给大家详细介绍了 Vim 的 3 种工作模式,本节来学习如何使用 Vim 编辑文件. 首先学习如何使用 Vim 打开文件. Vim 打开文件 使用 Vim 打开文 ...

  8. 为政务单位免费提供IP地址https证书—JoySSL

    JoySSL作为知名的证书颁发机构(CA),确实为政务单位提供了IP地址HTTPS证书的免费测试证书服务.以下是对此服务的详细介绍: 一.证书类型与特点 证书类型:JoySSL为政务单位提供了专为IP ...

  9. uni app下开发AI运动小程序解决方案

    一.引言 近年来,随着AI视频识别技术的飞速发展,市场上涌现出了众多基于视觉识别的AI运动APP.这些APP凭借AI视觉识别技术的强大能力,让用户只需面对摄像头进行运动锻炼,就能享受到智能计时.精准计 ...

  10. html face属性

    无意间发现邮件里面的字体非常像手写的,然后点击HTML源码发现,使用了这个face属性. 代码如下: <font face="comic sans ms">PS: 你看 ...