Golang数组及切片

代码

package main

import (
	"fmt"
)

func main() {
	// 创建数组
	fmt.Println("***创建数组***")
	// 方法一:
	var arr1 [3]int = [3]int{1, 2, 3}
	fmt.Println(arr1)

	// 方法二:
	var arr2 = [5]int{2, 4, 1, 8, 7}
	fmt.Println(arr2)

	// 方法三:
	arr3 := [3]int{3, 2, 1}
	fmt.Println(arr3)

	// 方法四:
	arr4 := [...]int{1, 6, 7, 8, 5}
	fmt.Println(arr4)

	// 遍历数组:
	fmt.Println("***遍历数组***")
	// 方法一:
	for i := 0; i < len(arr4); i++ {
		fmt.Printf("索引:%d,值:%d\n", i, arr4[i])
	}

	fmt.Println("-------------------------")
	// 方法二:
	for index, values := range arr4 {
		fmt.Printf("索引:%d,值:%d\n", index, values)
	}

	// 创建二维数组
	fmt.Println("***创建二维数组***")
	var arr5 [3][3]int = [3][3]int{{1, 3, 5}, {2, 4, 6}, {8, 9, 10}}
	fmt.Println(arr5)

	// 遍历二维数组
	fmt.Println("***遍历二维数组***")
	// 方法一
	for i := 0; i < len(arr5); i++ {
		for j := 0; j < len(arr5[i]); j++ {
			fmt.Print(arr5[i][j], "\t")
		}
		fmt.Println()
	}
	fmt.Println("-------------------------")

	// 方法二
	for index, value := range arr5 {
		for i, v := range value {
			fmt.Printf("arr5[%v][%v] = %v\t", index, i, v)
		}
		fmt.Println()
	}

	// 创建切片
	fmt.Println("***创建切片***")
	// 方法一:
	slice1 := arr4[1:3]
	fmt.Println(slice1)

	// 方法二:make([],len,cup)
	slice2 := make([]int, 5, 20)
	slice2[1] = 99
	slice2[4] = 100
	fmt.Println(slice2)

	// 方法三:
	slice3 := []int{1, 3, 5, 7, 9}
	fmt.Println(slice3)

	// 切片遍历
	fmt.Println("***遍历切片***")
	// 方法一:
	for i := 0; i < len(slice3); i++ {
		fmt.Printf("key:%d,value:%d\n", i, slice3[i])
	}
	fmt.Println("-------------------------")

	// 方法二:for + range
	for k, v := range slice3 {
		fmt.Printf("key:%d,value:%d\n", k, v)
	}

	// 切片知识扩充
	fmt.Println("***切片知识扩充***")
	/* 1、改变切片的值,原数组中的值也会相应改变。
	原因:当通过一个数组创建一个切片后,数组中截取的第一个数的内存地址会指向整个切片,
	相当于内存地址是一样的,所以原数组值也会改变
	*/

	fmt.Println("改变切片的值")
	var intarr [5]int = [5]int{5, 4, 3, 2, 1}
	fmt.Println("原数组:", intarr)
	var intslice []int = intarr[1:3]
	fmt.Println("切片:", intslice)
	intslice[1] = 999
	fmt.Printf("原数组:%v,切片:%v\n", intarr, intslice)

	/* 2、append()函数增加切片的长度
	   注意:1、使用 append() 函数后,底层会创建一个新的切片,首先把旧的切片的内容复制到新的切片中,再添加新的内容,
	   所以使用 append() 函数后,需要重新赋值给一个变量
	        2、append() 函数还能添加切片内容,添加切片时,添加的切片后面要加 ...
	*/

	fmt.Println("append() 函数的使用")
	s1 := intarr[:]
	// 添加值
	s2 := append(s1, 88, 66)
	fmt.Println("添加值:", s2)
	// 添加切片
	s := []int{33, 44}
	s3 := append(s1, s...) // s切片后面要加...
	fmt.Println("添加切片:", s3)

	/*3、copy()函数进行切片的拷贝
	  copy(b,a)把 a 中的内容复制到 b 中
	*/
	fmt.Println("copy() 函数的使用")
	a := []int{5, 6, 7}
	b := make([]int, 6)
	copy(b, a)
	fmt.Println("a复制到b中后:", b)
}

结果

Golang数组及切片_第1张图片
Golang数组及切片_第2张图片

你可能感兴趣的:(golang,golang,开发语言,后端)