Go之数组、切片、映射

一、数组

        数组用于存放相同类型的值,数组一旦确定了长度,在超过了这个长度之后就不能再往其中添加元素。

1、简单类型的数组

package main

import (
	"fmt"
)

func main() {
	var arr1 [3]int // 元素会被自动初始化为0值 => {0, 0, 0}
	arr1[0] = 1
	arr1[1] = 2
	arr1[2] = 3

	arr2 := [3]int{1} // 位提供初始化的元素被初始化为零值 => {1, 0, 0}

	arr3 := [3]int{1, 2: 3} // 指定索引2的元素初始化值为3 => {1, 0, 3}

	arr4 := [...]int{1, 2, 3} // 不直接指定长度,编译器会根据元素个数给定长度 => {1, 2, 3}

	arr5 := [...]int{1, 2: 3} // 指定索引 2 的元素初始化值为3,会影响该数组长度 => {1, 0, 3}

	fmt.Println(arr1, arr2, arr3, arr4, arr5)
}

2、复合类型的数组

package main

import "fmt"

type People struct {
	name string
	age  int
}

func main() {
	peopleArray1 := [2]People{
		{name: "张三", age: 17},
		{name: "李四", age: 18},
	}
	peopleArray2 := [...]People{
		{"王五", 19}, // 省略结构体标签
		{"赵六", 20},
	}

	fmt.Println(peopleArray1)
	fmt.Println(peopleArray2)
}

3、多维数组

        如果要使用...,只能在第一维中使用。len()和cap()也只能返回第一维的长度和容量。如果数组中的元素支持==判断,那么该数组也支持==判断。

package main

import "fmt"

func main() {
	arr1 := [...][3]int{}
	arr2 := [4][2]int{{11, 12}, {21, 22}, {31, 32}, {41, 42}}
	arr3 := [...][2]int{{11, 12}, {21, 22}, {31, 32}, {41, 42}}

	fmt.Println(arr1)
	fmt.Println(arr2)
	fmt.Println(arr3)

	fmt.Println(len(arr2))
	fmt.Println(cap(arr2))
	fmt.Println(arr2 == arr3)
}

二、切片

发布了108 篇原创文章 · 获赞 31 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/lzghxjt/article/details/96919461