Go语言基础语法二 | 青训营

97 阅读2分钟

1. 数组Array

  • 数组:是一种数据类型的固定长度的序列。
  • 定义:数组长度必须是常量且是类型的组成部分。一旦定义长度不能变。 例如:var a [10]int
  • 长度是数组类型的一部分。var a [5]intvar a [10]int 是不同的类型。
  • 数组可以通过下标访问,下标从0开始。
  • 访问越界:如果访问下标在数组的范围之外,则会造成越界。
  • 支持“==”和“!=”操作符。

1.1 数组的初始化

var a [5]int = [5]int{1, 2, 3, 4, 5}
var b = [5]int{1, 2, 3}
var c = [5]string{3: "hello", 4: "world"}

2. 切片Slice

slice不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案。

  • 切片:切片是数组的一个引用,切片是引用类型。
  • 切片的长度可以改变,切片是一个可变的数组。
  • 切片遍历方式和数组一样,可以用len()求长度,读写操作不能超过该范围。
  • cap可以求出切片最大扩张容量,不能超出数组限制。0 <= len(slice) <= len(array)
  • 切片的定义:var 变量名 []类型。例如:var a []string
  • 如果 slice == nil,那么len、cap的结果都等于 0。

操作:

  • s[n]:切片s中索引位置为n的项
  • s[:]:从切片s的索引位置0到len(s) - 1处所获得的切片
  • s[low:]:从切片s的索引位置low到len(s) - 1处所获得的切片
  • s[:high]:从切片s的索引位置0到high处所获得的切片,len = high
  • s[low:high]:从切片s的索引位置low到high处所获得的切片,len = high - low
  • s[low:high:max]:从切片s的索引位置low到high处所获得的切片,len = high - low,cap = max - low
  • len(s):切片s的长度,总是<=cap(s)
  • cap(s):切片s的容量,总是>=len(s)

3. 指针

指针地址、指针类型、指针取值

3.1 Go语言中的指针

Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针而无需拷贝数据。类型指针不能进行偏移和运算。Go原因呢中的指针操作很简单,两个符号:& (取地址)和 * (根据地址取值)。

3.2 指针地址和指针类型

每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&放在变量前面对变量进行取地址操作。Go语言中的值类型都有对应的指针类型。

心得体会(总结)

  • 切片是动态数组:Golang的切片是一种抽象数据类型,它提供了对底层数组的访问和操作。与传统的数组不同,切片的长度可以在运行时进行扩容或缩减,使其具有更高的灵活性。
  • 切片的声明与初始化:切片可以使用make函数来进行声明和初始化,也可以通过简化的切片字面量进行快速初始化。
  • 切片与数组的比较:与数组相比,切片更加灵活且易于使用。切片的长度可以动态改变,可以方便地进行追加、删除和截取等操作。而数组的长度固定,在静态分配内存空间时更高效。