Go 高级数据类型

数组 Array

  • 数组是相同类型数据的集合,数组类型的长度是不可变的。
  • 数组类型的零值一定是不包含任何元素的空数组,填充元素为对应类型的零值。
  • 索引表达式和切片表达式都可以应用于数组,包括len和cap函数。
  • 使用...标记数组长度标识由编译器计算元素数量来指定长度,但此时要指定数组所包含的元素。

实例

package main

import "fmt"

func main() {

    nums := []int{1,2,3}
    fmt.Println(len(nums),cap(nums))
}

切片 Slice

  • 切片是对数组的包装形式。切片本身不拥有任何数据,只是对现有数组的引用。
  • 对切片所做的任何修改都会反映在底层数组中。
  • 切片类型的零值为 nil;一个 nil 切片的长度和容量为 0。
  • 切片操作[a:b]返回的数据包括索引a但不包括索引b,其中 a>=0。
    省略a时默认值为 0,省略 b 时默认值为数组的长度,a、b 可以同时省略。
  • 切片的长度表示切割指定的元素个数,容量表示从切割开始位置起原始数组的元素个数。
  • 如果添加的元素的个数超过了容量的值,内存管理器会重新划分一块容量值为原容量2倍大小的内存空间,
    这个机制可以提升运算性能,因为内存的频繁重新划分会降低性能 。

实例:

package main

import "fmt"

func main() {

    nums := []int{1,2,3} // 声明底层数组
    fmt.Println(len(nums),cap(nums)) // 打印信息
    nums = append(nums,4) // 切片追加元素
    nums[0] = -100 // 改变首位数组
    fmt.Println(nums,len(nums),cap(nums)) // 打印追加后信息
}

字典 Map

  • Go的字典类型 Map 是散列表(hash table)的实现。
  • 散列表是一个实现了关联数组的数据结构,关联数组适用于表示键值对的无序集合的一种抽象数据类型。

实例:

func TestMap(t *testing.T) {

	nums := map[rune]int{}
	nums['A'] = 123
	nums['B'] = 456
	delete(nums, 'A')
	fmt.Printf("%#v", nums)
}
  • delete 函数不管键是否存在都会默默执行完毕。

make 函数

  • 内置的 make 函数可以用来初始化切片、字典和通道类型的值。

语法:

  nums := make([]int,10)
  • 这样会为 nums 内的数字全部填充零值 0 。
原文地址:https://www.cnblogs.com/devzyh/p/12712545.html